<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.feedsky.com/styles/feedsky1.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link href="http://feed.feedsky.com/fyting" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feed.feedsky.com/fyting" type="application/rss+xml"></fs:self_link><lastBuildDate>Sun, 21 Sep 2008 17:23:00 GMT</lastBuildDate><title>一路走下去</title><image><url>http://www.feedsky.com/feed/fyting/sc/gif</url><title>一路走下去</title><link>http://www.fyting.com</link></image><link>http://www.fyting.com</link><language>en</language><pubDate>Sun, 21 Sep 2008 17:53:47 GMT</pubDate><item><title>都别装了，难道你们都懂SOA吗</title><link>http://item.feedsky.com/~feedsky/fyting/~7018591/117246437/1487593/1/item.html</link><content:encoded>&lt;p&gt;曾经想努力搞懂啥叫SOA，因为某著名杂志曾写到21世纪不懂SOA的软件开发人员无法生存。结果，我真的太肤浅，看来看去，技术上的东西就那几种，也远远达不到各方所宣传的效果，只是对原有的经验的一个总结和标准化。所以，看上去的SOA就什么都是，它是一种架构，是一种解决了N多问题的方案，一种设计理念，一种软件的构建方法，它，还可以是一种或多种产品……    &lt;br /&gt;还别说，架构、方案，让一群不太懂技术的经理们信以为真，于是，赶快跟上。所谓的理念、设计之类的名词也把一群软件开发人员忽悠了，好久不来JE，发现一个SOA的帖子只&lt;a target=&quot;_blank&quot; href=&quot;http://www.javaeye.com/topic/243203&quot;&gt;因为你不懂SOA&lt;/a&gt;，我本以为可以解除我的困惑，结果楼主高屋建瓴之后来了段代码:&lt;/p&gt;
&lt;div style=&quot;border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px&quot;&gt;
&lt;pre style=&quot;border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; CalculatorService {
    &lt;span style=&quot;color: #0000ff&quot;&gt;private&lt;/span&gt; AddService addService;
    @Reference
    &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; setAddService(AddService addService) {
        &lt;span style=&quot;color: #0000ff&quot;&gt;this&lt;/span&gt;.addService = addService;
    }
    &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;double&lt;/span&gt; add(&lt;span style=&quot;color: #0000ff&quot;&gt;double&lt;/span&gt; n1, &lt;span style=&quot;color: #0000ff&quot;&gt;double&lt;/span&gt; n2) {
        &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; addService.add(n1, n2);
    }
}&lt;/pre&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;
    &lt;br /&gt;并且说到： &lt;/p&gt;
&lt;p&gt;那么，addService.add(n1, n2)是什么调用？在SCA的架构体系下： &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;他可以是简单的java调用——你能方便而快速的做JUnit Test. &lt;/li&gt;
&lt;li&gt;他可以也可是复杂一点的EJB调用——事务，分布式，Cache等你所想要的企业级特性的支持 &lt;/li&gt;
&lt;li&gt;他还可以是复杂一点的Web Service调用，具体提供这个add服务的也许是一个.Net程序，又或者是一个八百年前的老系统已有的服务。。。。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;是的，他可以做最复杂的事情，但也是最简单的POJO。对于开发者来说，只用关心他的业务，其它的一切都可以忽略。&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;
&lt;p&gt;你看出什么来没有，这代码似曾相识啊，这就是一标准的策略模式的实现。不要一提设计模式就露出一副鄙视的样子，好吧，这不是Spring里多年前的IOC啊、DI啊啥的？你看，这还真能忽悠。（这也挺搞的，以前很多人搞设计模式，结果&lt;a target=&quot;_blank&quot; href=&quot;http://www.jdon.com/aboutme.htm&quot;&gt;自己把自己忽悠了&lt;/a&gt;。现在搞SOA，又有人把自己忽悠了，而且被设计模式给忽悠了）&lt;/p&gt;
&lt;p&gt;SOA，至少是现在我自己了解到的SOA，就是个把各种东西揉在一起，换个马甲，然后开始卖概念，顺便把产品也送出去。这也不要技术人员懂，就是卖给IT经理之类的（记得是O6z大叔这么说的？）。从技术的角度提出，然后让技术人员看不懂，却给不搞具体技术的人看，然后得出某种极其先进、深不可测、变幻万千的结论，真是…… &lt;/p&gt;
&lt;p&gt;上次某厂商来成都时我专门去听了，我承认浪费了半天时间。其中有个印象比较深刻的： &lt;/p&gt;
&lt;p&gt;提到这个厂商能做到与IBM、BEA之流一起制定标准，实属不易。但人家也从不亲口提民族产业，人家只说合作。到最后不知道是有人被忽悠了还是咋的，在提问时说道：以后SOA会分为微软阵营和其他厂商阵营，还举例使用WCF的例子，说这就被绑定了，用WCF就被绑上微软了。微软自然是人人喊打的，于是最终演变为一场支持国产软件的活动，为民族软件而自豪，这是有人亲自发短信，在现场的短信大屏幕上出现的。我问道：用那啥SOS就不绑定了吗？无解。&lt;br /&gt;
  &lt;br /&gt;我问那个Component是怎么划分的粒度，我想看看这和普通的软件开发流程有啥区别，如何应对变化。得，最后演示了个画图生成代码的高级工具，但没看出太多实质的东西，发生变化就得重新画图，复杂的流程估计那图得成蜘蛛网了，比代码看起还累。不过效果倒是很震撼。看：只懂业务也能写软件了，正符合被忽悠人群的需要。这东西，本来就一高级代码生成器+文档、流程管理（据说这一点还算不错），扯上SOA，值钱了，也好卖了，一份抵过去五份。我并非想批判人家的产品，只是想让大家看看这现实中的SOA是怎么回事。 &lt;/p&gt;
&lt;p&gt;一时兴起，言辞太偏激，本来想作为回帖的，但还是贴到个人博客上比较好，好久没打这么多字了，正好凑一篇。:)&lt;/p&gt;
&lt;p&gt;到处写blog真是累，幸好有&lt;a target=&quot;_blank&quot; href=&quot;http://download.live.com/writer&quot;&gt;windows live writer&lt;/a&gt;和一堆插件，微软的window-live总算做出个有用的东西……&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.fyting.com/post/12/feed</wfw:commentRss><description>曾经想努力搞懂啥叫SOA，因为某著名杂志曾写到21世纪不懂SOA的软件开发人员无法生存。结果，我真的太肤浅，看来看去，技术上的东西就那几种，也远远达不到各方所宣传的效果，只是对原有的经验的一个总结和标准化。所以，看上去的SOA就什么都是，它是一种架构，是一种解决了N多问题的方案，一种设计理念，一种软件的构建方法，它，还可以是一种或多种产品……    还别说，架构、方案，让一群不太懂技术的经理们信以为真，于是，赶快跟上。所谓的理念、设计之类的名词也把一群软件开发人员忽悠了，好久不来JE，发现一个SOA的帖子只因为你不懂SOA，我本以为可以解除我的困惑，结果楼主高屋建瓴之后来了段代码:

public class CalculatorService {
    private AddService addService;
    @Reference
    public void setAddService(AddService addService) {
        this.addService = addService;
    }
    public double add(double n1, double n2) {
      [...]</description><category>SOA</category><category>随笔</category><category>都别装了</category><pubDate>Mon, 22 Sep 2008 01:23:00 +0800</pubDate><author>Kenny</author><comments>http://www.fyting.com/post/12#comments</comments><guid isPermaLink="false">http://www.fyting.com/post/12</guid><dc:creator>Kenny</dc:creator><fs:srclink>http://www.fyting.com/post/12</fs:srclink><fs:srcfeed>http://www.fyting.com/feed</fs:srcfeed><fs:itemid>feedsky/fyting/~7018591/117246437/1487593</fs:itemid></item><item><title>代码统计工具COLC</title><link>http://item.feedsky.com/~feedsky/fyting/~7018591/117246438/1487593/1/item.html</link><content:encoded>&lt;p&gt;虽说代码行数不重要，但有时候总想统计下自己的代码行数，看看最近的成果。以前一直用&lt;a href=&quot;http://www.skycn.com/soft/7806.html&quot; target=&quot;_blank&quot;&gt;这个&lt;/a&gt;国产小软件，但感觉操作稍显烦琐，我更喜欢命令行的方式，自由度更高。昨天无意中在&lt;a href=&quot;http://maomaode.bokeland.com/blog/3/187/2008/03/25/348806&quot; target=&quot;_blank&quot;&gt;这里&lt;/a&gt;发现了叫做&lt;a href=&quot;http://cloc.sourceforge.net/&quot; target=&quot;_blank&quot;&gt;CLOC&lt;/a&gt;的小软件，基于Perl，并且是Opensource的，地址&lt;a title=&quot;http://cloc.sourceforge.net/&quot; href=&quot;http://cloc.sourceforge.net/&quot;&gt;http://cloc.sourceforge.net/&lt;/a&gt;。下载后只有一个cloc.exe文件，使用方式也很简单，只需要：cloc.exe /path/to/source-code，输出如下&lt;/p&gt;
&lt;div style=&quot;border-right: gray 1px solid; padding-right: 4px; padding-left: 4px; font-size: 8pt; border-top: gray 1px solid; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 300px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; background-color: #f4f4f4&quot;&gt;
&lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none&quot;&gt;C:\Documents and Settings\kenny&amp;gt;cloc D:\Projects\myproject\
     900 text files.
classified 900 files
     634 unique files.
     607 files ignored.

http:&lt;span style=&quot;color: #008000&quot;&gt;//cloc.sourceforge.net v 1.04  T=3.0 s (84.3 files/s, 11367.0 lines/s)&lt;/span&gt;
&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-
Language          files     blank   comment      code    scale   3rd gen. equiv
&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-
Java                135      1778      1963      8779 x   1.36 =       11939.44
Javascript           22      1875      1761      8590 x   1.48 =       12713.20
XML                  39       308       247      2744 x   1.90 =        5213.60
HTML                 39        33       474      2000 x   1.90 =        3800.00
CSS                  11       156        72      1445 x   1.00 =        1445.00
DTD                   1       234       254       713 x   1.90 =        1354.70
SQL                   2        42        44       406 x   2.29 =         929.74
JSP                   3        18        14       106 x   1.48 =         156.88
XSLT                  1         0         6        39 x   1.90 =          74.10
&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-
SUM:                253      4444      4835     24822 x   1.52 =       37626.66
&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;当然了，有很多选项可以用，具体的可以看看cloc首页的介绍。当然，每次这样手动输入命令很麻烦，考虑下和Total-Commander结合。编辑一个cloc.bat文件，内容如下：&lt;/p&gt;
&lt;div style=&quot;border-right: gray 1px solid; padding-right: 4px; padding-left: 4px; font-size: 8pt; border-top: gray 1px solid; padding-bottom: 4px; margin: 20px 0px 10px; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; background-color: #f4f4f4&quot;&gt;
&lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none&quot;&gt;cloc.exe %1
PAUSE&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;把这个bat文件拖到TC的工具栏上&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.fyting.com/wp-content/uploads/2008/08/image.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; title=&quot;Drag to Total Commander&quot; border=&quot;0&quot; alt=&quot;Drag to Total Commander&quot; src=&quot;http://www.fyting.com/wp-content/uploads/2008/08/image-thumb.png&quot; width=&quot;503&quot; height=&quot;291&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;然后在工具栏新出现的图标上点右键，选“更改”，然后把参数设置为%p，如图：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.fyting.com/wp-content/uploads/2008/08/image1.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://www.fyting.com/wp-content/uploads/2008/08/image-thumb1.png&quot; width=&quot;534&quot; height=&quot;223&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;“确定”后大功告成，在TC里进入你的源码目录时，点击刚才新建的图标，就开始自动统计当前目录了。&lt;/p&gt;
&lt;/p&gt;
&lt;div style=&quot;padding-right: 0px; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px; display: inline&quot; id=&quot;scid:8eb9d37f-1541-4f29-b6f4-1eea890d4876:b4937fb4-a113-454b-b763-e113c9a062f8&quot; class=&quot;wlWriterSmartContent&quot;&gt;
&lt;div&gt;&lt;a href=&quot;http://www.fyting.com/wp-content/uploads/2008/08/cloc.zip&quot; target=&quot;_self&quot;&gt;cloc.zip&lt;/a&gt;&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;</content:encoded><wfw:commentRss>http://www.fyting.com/post/10/feed</wfw:commentRss><description>虽说代码行数不重要，但有时候总想统计下自己的代码行数，看看最近的成果。以前一直用这个国产小软件，但感觉操作稍显烦琐，我更喜欢命令行的方式，自由度更高。昨天无意中在这里发现了叫做CLOC的小软件，基于Perl，并且是Opensource的，地址http://cloc.sourceforge.net/。下载后只有一个cloc.exe文件，使用方式也很简单，只需要：cloc.exe /path/to/source-code，输出如下

C:\Documents and Settings\kenny&amp;#62;cloc D:\Projects\myproject\
     900 text files.
classified 900 files
     634 unique files.
     607 files ignored.

http://cloc.sourceforge.net v 1.04  T=3.0 s (84.3 files/s, 11367.0 lines/s)
&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-
Language          files     blank   comment [...]</description><category>software</category><category>devtools</category><pubDate>Sun, 10 Aug 2008 14:41:00 +0800</pubDate><author>Kenny</author><comments>http://www.fyting.com/post/10#comments</comments><guid isPermaLink="false">http://www.fyting.com/post/10</guid><dc:creator>Kenny</dc:creator><fs:srclink>http://www.fyting.com/post/10</fs:srclink><fs:srcfeed>http://www.fyting.com/feed</fs:srcfeed><fs:itemid>feedsky/fyting/~7018591/117246438/1487593</fs:itemid></item><item><title>MySQL将继续开源</title><link>http://item.feedsky.com/~feedsky/fyting/~7018591/117246439/1487593/1/item.html</link><content:encoded>&lt;p&gt;MySQL负责开源社区的副总裁Kaj Arnö在blog中写道：MySQL今后将继续保持所有功能的开源，包括MySQL Connectors、存储引擎，以及MySQL6.0中新增的备份功能、MyISAM备份驱动、加密和压缩存储也将开源。&lt;br /&gt;
在blog中，Kaj Arnö提到，做出此决定是因为MySQL已经从当初想独立上市的路线转换出来，变成了SUN的一部分。他还提到了MySQL的两条发展路线:openness, and the business model.&lt;br /&gt;
原文见 &lt;a  href=&quot;http://blogs.mysql.com/kaj/2008/05/06/mysql-server-is-open-source-even-backup-extensions/&quot;&gt;http://blogs.mysql.com/kaj/2008/05/06/mysql-server-is-open-source-even-backup-extensions/&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.fyting.com/post/5/feed</wfw:commentRss><description>MySQL负责开源社区的副总裁Kaj Arnö在blog中写道：MySQL今后将继续保持所有功能的开源，包括MySQL Connectors、存储引擎，以及MySQL6.0中新增的备份功能、MyISAM备份驱动、加密和压缩存储也将开源。
在blog中，Kaj Arnö提到，做出此决定是因为MySQL已经从当初想独立上市的路线转换出来，变成了SUN的一部分。他还提到了MySQL的两条发展路线:openness, and the business model.
原文见 http://blogs.mysql.com/kaj/2008/05/06/mysql-server-is-open-source-even-backup-extensions/</description><category>news</category><category>opensource</category><category>MySQL</category><category>未分类</category><pubDate>Thu, 08 May 2008 00:05:44 +0800</pubDate><author>Kenny</author><comments>http://www.fyting.com/post/5#comments</comments><guid isPermaLink="false">http://www.fyting.com/?p=5</guid><dc:creator>Kenny</dc:creator><fs:srclink>http://www.fyting.com/post/5</fs:srclink><fs:srcfeed>http://www.fyting.com/feed</fs:srcfeed><fs:itemid>feedsky/fyting/~7018591/117246439/1487593</fs:itemid></item><item><title>dojo1.1的主要更新</title><link>http://item.feedsky.com/~feedsky/fyting/~7018591/117246440/1487593/1/item.html</link><content:encoded>&lt;blockquote&gt;&lt;p&gt;原作者 Kenny，转载请注明出自 http://www.fyting.com，非常感谢。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;dojo1.1发布也有些时日了，今天静下来看了看到底有哪些更新以及对项目的影响，顺便把&lt;a target=&quot;_blank&quot; href=&quot;http://dojotoolkit.org/book/dojo-1-1-release-notes&quot;&gt;release notes&lt;/a&gt;大体翻译了过来。&lt;/p&gt;
&lt;h2&gt;Core&lt;/h2&gt;
&lt;h3&gt;dojo.fromJson解析失败时，会抛出error，需要程序员手动try、catch&lt;/h3&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;javascript&quot;&gt;        &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;var&lt;/span&gt; result = text;
        &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;try&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;
         result = dojo.&lt;span style=&quot;color: #006600;&quot;&gt;fromJson&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;text&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;
        &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;e&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;
         &lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;// squelch exception, use input as result&lt;/span&gt;
        &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3&gt;多版本支持&lt;/h3&gt;
&lt;p&gt;		dojo1.1可以与其他版本的dojo共存，甚至可以修改dojo的库名称，详细见:&lt;a target=&quot;_blank&quot; href=&quot;http://dojotoolkit.org/book/book-dojo/part-3-javascript-programming-dojo-and-dijit/multiple-versions-dojo-page&quot;&gt;Dojo Book Page on multiversion support&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;在DOM载入后再加载dojo&lt;/h3&gt;
&lt;p&gt;        设置djConfig.afterOnLoad = true，这是&lt;a  target=&quot;_blank&quot; href=&quot;http://archive.dojotoolkit.org/nightly/dojotoolkit/dojo/tests/_base/_loader/afterOnLoad.html&quot;&gt;测试页面&lt;/a&gt; 没感觉到这个功能的用处，并且在DOM载入后如果移动鼠标有可能引起javascript，整个dojo都无法载入。&lt;/p&gt;
&lt;h3&gt;XMLHttpRequest的变化&lt;/h3&gt;
&lt;p&gt;		以前那一堆dojo.xhrGet(), dojo.xhrPost(), dojo.xhrRawPost(), dojo.xhrPut(), dojo.xhrRawPut() 还有 dojo.xhrDelete()，现在终于有了一个通用的函数：dojo.xhr()。&lt;/p&gt;
&lt;p&gt;		使用dojo.xhr*将发送名为“X-Requested-With”的http header，值为“XMLHttpRequest”&lt;/p&gt;
&lt;h3&gt;cacheBust&lt;/h3&gt;
&lt;p&gt;        如果设置djConfig.cacheBust = (new Date()).getTime()，载入模块和模板时，将把这个cacheBust的值将添加到URL中，防止浏览器缓存。在1.0里面其实已经存在，也是个不知所云的功能。&lt;/p&gt;
&lt;h3&gt;dojo.attr()&lt;/h3&gt;
&lt;p&gt;		新增加dojo.attr()，dojo.hasAttr()，还有dojo.removeAttr()函数，用于获取DOM节点的attribute&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;javascript&quot;&gt;    &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;var&lt;/span&gt; d1 = dojo.&lt;span style=&quot;color: #006600;&quot;&gt;byId&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'div1'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;
    console.&lt;span style=&quot;color: #006600;&quot;&gt;debug&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;dojo.&lt;span style=&quot;color: #006600;&quot;&gt;attr&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;d1,&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;id&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;
    console.&lt;span style=&quot;color: #006600;&quot;&gt;debug&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;div1 has age?&amp;quot;&lt;/span&gt; + dojo.&lt;span style=&quot;color: #006600;&quot;&gt;hasAttr&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;d1,&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;age&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;
    dojo.&lt;span style=&quot;color: #006600;&quot;&gt;attr&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;d1,&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;age&amp;quot;&lt;/span&gt;,&lt;span style=&quot;color: #CC0000;&quot;&gt;18&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;
    console.&lt;span style=&quot;color: #006600;&quot;&gt;debug&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;div1 has age?&amp;quot;&lt;/span&gt; + dojo.&lt;span style=&quot;color: #006600;&quot;&gt;hasAttr&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;d1,&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;age&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;
    console.&lt;span style=&quot;color: #006600;&quot;&gt;debug&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;dojo.&lt;span style=&quot;color: #006600;&quot;&gt;attr&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;d1,&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;age&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3&gt;dojo.style()&lt;/h3&gt;
&lt;p&gt;		dojo.style现在可以一次性设置多个css属性，以前是这样的：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;javascript&quot;&gt;    dojo.&lt;span style=&quot;color: #006600;&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;dojo.&lt;span style=&quot;color: #006600;&quot;&gt;byId&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'div2'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;,&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;width&amp;quot;&lt;/span&gt;,&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;700px;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;
    dojo.&lt;span style=&quot;color: #006600;&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;dojo.&lt;span style=&quot;color: #006600;&quot;&gt;byId&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'div2'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;,&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;height&amp;quot;&lt;/span&gt;,&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;600px;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;        现在可以这样了：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;javascript&quot;&gt;    dojo.&lt;span style=&quot;color: #006600;&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;dojo.&lt;span style=&quot;color: #006600;&quot;&gt;byId&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'div2'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;,&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;
        width:&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;700px&amp;quot;&lt;/span&gt;,
        height:&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;600px&amp;quot;&lt;/span&gt;,
        background:&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;#ccf&amp;quot;&lt;/span&gt;
    &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3&gt;dojo.query/NodeList&lt;/h3&gt;
&lt;p&gt;		dojo.query()结果可以使用attr()、instantiate()，还有之前就可以使用的style()也可以使用上面的那种dojo.style()的用法了。&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;javascript&quot;&gt;    dojo.&lt;span style=&quot;color: #006600;&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;thinger&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;opacity&amp;quot;&lt;/span&gt;: &lt;span style=&quot;color: #CC0000;&quot;&gt;0.5&lt;/span&gt;,
        &lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;border&amp;quot;&lt;/span&gt;: &lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;3px solid black&amp;quot;&lt;/span&gt;,
        &lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;height&amp;quot;&lt;/span&gt;: &lt;span style=&quot;color: #CC0000;&quot;&gt;300&lt;/span&gt;
    &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3&gt;动画/animation&lt;/h3&gt;
&lt;p&gt;		修正了动画效果的性能问题，增加了一个新的dojo.anim()方法，默认的duration从1秒变成了350ms，简化了指定动画属性的语法。另外重写了dojo.fx.combine()和dojo.fx.chain()的集成，现在集成不同的动画效果更加简单。&lt;br /&gt;
        &lt;code&gt;dojo.anim(&quot;id&quot;, { opacity: 0 }, 1000);&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Adobe AIR的支持&lt;/h3&gt;
&lt;p&gt;    1.1里面dojo提供了更好的AIR支持。&lt;a  target=&quot;_blank&quot; href=&quot;http://www.dojotoolkit.org/air&quot;&gt;http://www.dojotoolkit.org/air&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-4&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;Dijit&lt;/h2&gt;
&lt;h3&gt;widget模板的变化&lt;/h3&gt;
&lt;p&gt;		input类型的widget（包括ValidationTextBox, ComboBox等）的模板从&lt;br /&gt;
&lt;table&gt;转变成
&lt;div&gt;，因此自定义的样式也需要跟着修改了:(&lt;br /&gt;
		dijitTabInnerDiv的css class名字变成为了dijitTabContent&lt;br /&gt;
		Dialog,TooltipDialog的模板发生变化（触发关闭事件的名称从hide变成了onCancel，这说明把事件定义在模板里不是一个好的实践？）&lt;/p&gt;
&lt;h3&gt;themes/主题&lt;/h3&gt;
&lt;p&gt;		新的主题 nihilo&lt;br /&gt;
		soria终于完成了，貌似算dojo里比较好看的了……&lt;br /&gt;
		更新了原有的tundra主题（还是很难看）&lt;/p&gt;
&lt;h3&gt;新的widget&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;SimpleTextArea	不会自动改变大小的TextArea……&lt;/li&gt;
&lt;li&gt;MultiSelect组件	就是个多选的列表框，不要报太大希望，功能上很简陋。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Layout widgets&lt;/h3&gt;
&lt;p&gt;    新的&lt;a  target=&quot;_blank&quot; href=&quot;http://dojotoolkit.org/book/book-dojo/part-2-dijit-dojo-widget-library/layout/border-container&quot;&gt;BorderContainer&lt;/a&gt;提供了更小巧的js文件、更平滑的缩放效果。SplitContainer和LayoutContainer已经是deprecated，请使用新的BorderContainer。&lt;/p&gt;
&lt;h3&gt;Tree&lt;/h3&gt;
&lt;p&gt;    做了大量BUG修复和改进工作，一些API已经被标注为deprecated。1.1里主要修复了1.0里面tree关于拖动的bug，改进了数据更新的问题，使用了新的dojo.data.ItemFileWriteStore。详细请点击&lt;a  target=&quot;_blank&quot; href=&quot;http://www.dojotoolkit.org/2008/02/24/dijit-tree-and-dojo-data-dojo-1-1-model&quot;&gt;这里&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Dialog, TooltipDialog&lt;/h3&gt;
&lt;p&gt;		现在可以在其中放入TabContainer了，如果放入了Layout widgts，请千万不要在初始化方法里把整个dialog设置为style=&amp;#8221;display:none&amp;#8221;，而是使用style=&amp;#8221;visibility:hidden&amp;#8221;来代替。&lt;br /&gt;
		在dialog的DateTextBox里按ESC不会关闭dialog了。&lt;br /&gt;
		open dialog时，将把焦点放到第一个input组件里&lt;/p&gt;
&lt;h3&gt;Features/Bug fixes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;highlighting/focus invalid fields on attempted form submit&lt;/li&gt;
&lt;li&gt;separate edit and display mode for input widgets like NumberTextBox and CurrencyTextBox. For example, when editing US$ on an en-us locale machine, the $ sign and commas disappear&lt;/li&gt;
&lt;li&gt;input widget formatting bugs fixed (use of table abandoned)&lt;/li&gt;
&lt;li&gt;reset of forms now supported (must use dijit.Form widget)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Form widgets API更新与变化&lt;/h3&gt;
&lt;p&gt;引入了新的setAttribute()，旧的方法被标注为deprecated：&lt;br /&gt;
		setDisabled(Boolean)	==&gt;		setAttribute(&amp;#8221;disabled&amp;#8221;, Boolean)&lt;br /&gt;
		setChecked(Boolean)		==&gt;		setAttribute(&amp;#8221;checked&amp;#8221;, Boolean)
		&lt;/p&gt;
&lt;p&gt;
		原有的setValue()/getValue()更加贴近语义：&lt;br /&gt;
        获取value时使用getValue()，根据组件的不同而不同，尤其是CheckBox组件。&lt;br /&gt;
        由用户输入的值使用setValue，程序设置的值使用setAttribute(&amp;#8221;value&amp;#8221;, &amp;#8230;);
        &lt;/p&gt;
&lt;p&gt;
		CheckBox.getValue()会根据checkbox的状态进行序列化。&lt;br /&gt;
			当CheckBox未选中时	==&gt;		getValue()返回“false”&lt;br /&gt;
			其他时候返回CheckBox的“value”&lt;br /&gt;
		同样，CheckBox.setValue(Boolean)只会使CheckBox变为选中 or 未选中状态&lt;br /&gt;
		如果要改变CheckBox的值，请使用setAttribute(&amp;#8221;value&amp;#8221;,&amp;#8230;)，同理对于Button也是如此
        &lt;/p&gt;
&lt;p&gt;
		所有的form widget使用onFocus()/onBlur()，以前那一堆onblur,_onBlur等鬼东西现在走上正轨了。
		&lt;/p&gt;
&lt;p&gt;
		自定义的Form widget需要从dijit.form._FormValueWidget继承，以前是使用的dijit.form._FormWidget。如果是CheckBox一类，不需要用户直接输入value的widget，可以从dijit.form._FormWidget继承。
        &lt;/p&gt;
&lt;p&gt;
        dijit.Form widget fixes &lt;a  target=&quot;_blank&quot; href=&quot;http://trac.dojotoolkit.org/ticket/5775&quot; target=&quot;_blank&quot;&gt;#5775&lt;/a&gt;
        &lt;/p&gt;
&lt;h3&gt;其他&lt;/h3&gt;
&lt;p&gt;		FireFox3兼容(屁话)&lt;br /&gt;
		允许指定tooltip的位置（above/below/before/after）&lt;br /&gt;
		Bidi: All widgets should now be BiDi-compliant and mirror properly when dir=rtl is set on the document&lt;br /&gt;
		A11y - basically everything except Grid accessible &lt;/p&gt;
&lt;h3&gt;CSS class名称变化(自定义组件可能会受影响)&lt;/h3&gt;
&lt;p&gt;    See &lt;a  target=&quot;_blank&quot; href=&quot;http://trac.dojotoolkit.org/ticket/6104&quot;&gt;#6104&lt;/a&gt;&lt;br /&gt;
		IEFixedToolbar → dijitIEFixedToolbar&lt;br /&gt;
		dijitProgressBarVertical → dijitProgressBarV&lt;br /&gt;
		dijitProgressBarHorizontal → dijitProgressBarH&lt;br /&gt;
		RuleContainer → dijitRuleContainer&lt;br /&gt;
		HorizontalRuleContainer → dijitRuleContainerH&lt;br /&gt;
		VerticalRuleContainer → dijitRuleContainerV&lt;br /&gt;
		RuleLabel → dijitRuleLabel&lt;br /&gt;
		RuleLabelContainer → dijitRuleLabelContainer&lt;br /&gt;
		HorizontalRuleLabelContainer → dijitRuleLabelContainerH&lt;br /&gt;
		VerticalRuleLabelContainer → dijitRuleLabelContainerV&lt;br /&gt;
		HorizontalRuleLabel → dijitRuleLabelH&lt;br /&gt;
		VerticalRuleLabel → dijitRuleLabelV&lt;br /&gt;
		RuleMark → dijitRuleMark&lt;br /&gt;
		HorizontalRuleMark → dijitRuleMarkH&lt;br /&gt;
		VerticalRuleMark → dijitRuleMarkV&lt;br /&gt;
		dijitHorizontalSliderBar → dijitSliderBarH&lt;br /&gt;
		dijitVerticalSliderBar → dijitSliderBarV&lt;br /&gt;
		dijitVerticalSliderBottomBumper → dijitSliderBottomBumper&lt;br /&gt;
		dijitHorizontalSliderBumper → dijitSliderBumperH&lt;br /&gt;
		dijitVerticalSliderBumper → dijitSliderBumperV&lt;br /&gt;
		dijitVerticalSliderButtonContainer → dijitSliderButtonContainerV&lt;br /&gt;
		dijitHorizontalSliderButtonContainer → dijitSliderButtonContainerH&lt;br /&gt;
		dijitHorizontalSliderDecoration → dijitSliderDecorationH&lt;br /&gt;
		dijitVerticalSliderDecoration → dijitSliderDecorationV&lt;br /&gt;
		dijitHorizontalSliderImageHandle → dijitSliderImageHandleH&lt;br /&gt;
		dijitVerticalSliderImageHandle → dijitSliderImageHandleV&lt;br /&gt;
		dijitHorizontalSliderLeftBumper → dijitSliderLeftBumper&lt;br /&gt;
		dijitHorizontalSliderMoveable → dijitSliderMoveableH&lt;br /&gt;
		dijitVerticalSliderMoveable → dijitSliderMoveableV&lt;br /&gt;
		dijitHorizontalSliderProgressBar → dijitSliderProgressBarH&lt;br /&gt;
		dijitVerticalSliderProgressBar → dijitSliderProgressBarV&lt;br /&gt;
		dijitHorizontalSliderRemainingBar → dijitSliderRemainingBarH&lt;br /&gt;
		dijitVerticalSliderRemainingBar → dijitSliderRemainingBarV&lt;br /&gt;
		dijitHorizontalSliderRightBumper → dijitSliderRightBumper&lt;br /&gt;
		dijitVerticalSliderTopBumper → dijitSliderTopBumper&lt;br /&gt;
		dijitSplitterHorizontal → dijitSplitterH&lt;br /&gt;
		dijitSplitterVertical → dijitSplitterV&lt;br /&gt;
		dijitHorizontalSliderDecrementIcon → dijitSliderDecrementIconH&lt;br /&gt;
		dijitHorizontalSliderIncrementIcon → dijitSliderIncrementIconH&lt;br /&gt;
		dijitVerticalSliderIncrementIcon → dijitSliderIncrementIconV&lt;br /&gt;
		dijitVerticalSliderDecrementIcon → dijitSliderDecrementIconV&lt;/p&gt;
&lt;h2&gt;Dojox&lt;/h2&gt;
&lt;p&gt;	一些杂七杂八的东西，有些早已存在又拿出来说，没有翻译……&lt;br /&gt;
	DTL&lt;br /&gt;
	Many improvements to the detail library. The upshot is that you can now declare widgets where the templates have for loops, if statements, etc. For example:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;javascript&quot;&gt;&amp;nbsp;
	templateString: &lt;span style=&quot;color: #3366CC;&quot;&gt;'&amp;lt;div&amp;gt;&amp;lt;input dojoAttachEvent=&amp;quot;onkeyup: keyUp&amp;quot;&amp;gt;&amp;lt;ul&amp;gt;{% for item in items %}&amp;lt;li&amp;gt;${oldRepl} {{ item }}&amp;lt;/li&amp;gt;{% endfor %}&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;'&lt;/span&gt;
	See the demos &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;for&lt;/span&gt; examples.&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;	GFX&lt;br /&gt;
	animations for GFX, so you can animate strokes, fills, etc. See the career test example.&lt;br /&gt;
	- sketch: a drawing program on the web&lt;/p&gt;
&lt;p&gt;	DojoX Charting&lt;br /&gt;
	Soften your line charts by adding a &amp;#8220;tension&amp;#8221; property to the object used to add a plot (.addPlot); the lower the tension, the looser the curves. For best results, try a tension around 3; see the main chart test for examples.&lt;/p&gt;
&lt;p&gt;	dojox.lang.functional&lt;br /&gt;
	new package for functional idioms like lambda, reduce, etc.&lt;/p&gt;
&lt;p&gt;	Crypto merged with encoding&lt;br /&gt;
	The original dojox.crypto package has been merged with the newer DojoX encoding project; dojox.crypto will be entirely removed by release 1.2.&lt;/p&gt;
&lt;p&gt;	DojoX FX Easing functions&lt;br /&gt;
	Robert Penner donated his easing functions to dojo, see the dojo-moj-oe post.&lt;/p&gt;
&lt;p&gt;	dojox.highlight&lt;br /&gt;
    客户端代码高亮组件，语法是&lt;code&gt;&amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;&lt;/code&gt;，可以用在dojo1.0及以上版本（dojo &gt; 0.9?)	&lt;/p&gt;
&lt;p&gt;	dojox.data&lt;br /&gt;
	new dojox.data stores&lt;/p&gt;
&lt;p&gt;	Storage&lt;br /&gt;
	Flash storage ported from 0.4&lt;/p&gt;
&lt;p&gt;	Jaxer&lt;br /&gt;
	???&lt;/p&gt;
&lt;p&gt;	- more NodeList animations&lt;/p&gt;
&lt;p&gt;	DojoX Widgets&lt;br /&gt;
		New widgets:&lt;/p&gt;
&lt;p&gt;		FisheyeLight: 类似于Mac Dock的东西，比之前的版本更小巧，速度更快。&lt;br /&gt;
		Wizard - 向导组件（上一步、下一步），从0.4来的。&lt;br /&gt;
		ScrollPane - 根据鼠标位置自动移动的面板&lt;br /&gt;
		DragPane - 能拖动内容的面板，就像PDF Reader&lt;br /&gt;
		Magnifier 放大镜&lt;br /&gt;
		CheckedMultiSelect - like a select with multiple=true but displays checkboxes for each item&lt;br /&gt;
	Updated:&lt;/p&gt;
&lt;p&gt;		Lightbox&lt;/p&gt;
&lt;h2&gt;Util (buildscripts)&lt;/h2&gt;
&lt;p&gt;	新的构建选项&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;cssOptimize：设置cssOptimize=comments将去除CSS里所有空白，并根据@import规则，把所有CSS文件压缩为一行&lt;/li&gt;
&lt;li&gt;cssImportIgnore：设置cssOptimize里需要忽略掉的css文件。使用逗号分开，路径与@import的url一致&lt;/li&gt;
&lt;li&gt;buildLayers：只重新构建某些layer，用法是buildLayers=[comma separated list of layer names]&lt;/li&gt;
&lt;li&gt;symbol：symbol=short 和 symbol=long将为所有匿名函数添加一个名称，主要方便调试&lt;/li&gt;
&lt;li&gt;dojo多版本并存有一些相关选项，请参考http://dojotoolkit.org/book/book-dojo/part-3-javascript-programming-dojo-and-dijit/multiple-versions-dojo-page&lt;/li&gt;
&lt;li&gt;Rhino builds：指定Rhino为host environment，代替普通的浏览器环境。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;    下载地址 &lt;a  target=&quot;_blank&quot; href=&quot;http://www.dojotoolkit.org/downloads&quot;&gt;http://www.dojotoolkit.org/downloads&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
整个dojo1.1，总体是在1.0的基础上进行了大量BUG FIX工作，据说修复了&lt;a  target=&quot;_blank&quot; href=&quot;http://trac.dojotoolkit.org/milestone/1.1&quot;&gt;800个BUG&lt;/a&gt;。变动稍大的部分是widget的表单组件，由于一些方法名称、模板的变更(table-&gt;div)以及CSS的变化，对于自定义组件的影响还是挺大的，有很多自定义的CSS需要重新写，有些可能需要修改代码。&lt;br /&gt;
开始对过度设计进行弥补，比如SimpleTextArea这东西就是个普通的TextArea，以前的TextArea会自动改变大小，导致Grid里一行撑很高，纯粹没事找抽。Grid里移动鼠标时老是自动晃的功能也去了，谢天谢地。&lt;br /&gt;
在可用性方面有所提升，很多Form组件增加了布局相关的代码，比如resize方法。soria主题看起来也比原来的tundra稍微好看，不过要打到ext的那种漂亮程度和像素级精度还很远。
&lt;/p&gt;&lt;/blockquote&gt;</content:encoded><wfw:commentRss>http://www.fyting.com/post/4/feed</wfw:commentRss><description>原作者 Kenny，转载请注明出自 http://www.fyting.com，非常感谢。
dojo1.1发布也有些时日了，今天静下来看了看到底有哪些更新以及对项目的影响，顺便把release notes大体翻译了过来。
Core
dojo.fromJson解析失败时，会抛出error，需要程序员手动try、catch

        var result = text;
        try&amp;#123;
         result = dojo.fromJson&amp;#40;text&amp;#41;;
        &amp;#125;catch&amp;#40;e&amp;#41;&amp;#123;
         // squelch exception, use input [...]</description><category>dojo</category><category>webdev</category><pubDate>Thu, 17 Apr 2008 03:58:30 +0800</pubDate><author>Kenny</author><comments>http://www.fyting.com/post/4#comments</comments><guid isPermaLink="false">http://www.fyting.com/?p=4</guid><dc:creator>Kenny</dc:creator><fs:srclink>http://www.fyting.com/post/4</fs:srclink><fs:srcfeed>http://www.fyting.com/feed</fs:srcfeed><fs:itemid>feedsky/fyting/~7018591/117246440/1487593</fs:itemid></item><item><title>dojo Quick Start</title><link>http://item.feedsky.com/~feedsky/fyting/~7018591/117246441/1487593/1/item.html</link><content:encoded>&lt;p&gt;以前的文章了，先转过来凑数，以后将只在这里更新~~~&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;原作者: Kenny 转载请注明出自  http://www.fyting.com,谢谢&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;2006年初，dojo还是0.22的时候就很关注它的发展，可一直没有在实际项目中使用。一来是由于文档的缺少，而来是dojo的相关介绍总是让人望而生畏。到现在都如此，第一个hello world就搞了一大堆东西，比如widget组件，自定义的script标签等，加上要引入什么css文件，djConfig、dojo.require等等，让人很迷惑，这么复杂，到底dojo该怎么使用呢？我只是想把dojo当作一个普通的js类库，就像prototype那样？OK，闲话少说，来看看如何使用dojo。&lt;/p&gt;
&lt;h2&gt;首先，引入dojo.js&lt;/h2&gt;
&lt;p&gt;dojo的发行包里有4个子目录&lt;br /&gt;
假设你是这样的目录结构: &lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
project&lt;br /&gt;
|&lt;br /&gt;
+&amp;#8211;dojo-lib&lt;br /&gt;
| |&lt;br /&gt;
| +&amp;#8211;dijit&lt;br /&gt;
| +&amp;#8211;dojo&lt;br /&gt;
| +&amp;#8211;dojox&lt;br /&gt;
| +&amp;#8211;util&lt;br /&gt;
|&lt;br /&gt;
+&amp;#8211;dojo_hello_world.html
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;要引入的文件是名叫&amp;#8221;dojo&amp;#8221;的子目录里的dojo.js&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;./dojo-lib/dojo/dojo.js&amp;quot;&amp;gt;
&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2&gt;开始使用dojo&lt;/h2&gt;
&lt;p&gt;现在开始使用dojo的第一个函数:dojo.byId&lt;br /&gt;
dojo.byId就等同于常用的document.getElementById&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre&gt;&amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;username&amp;quot; id=&amp;quot;username&amp;quot; value=&amp;quot;Mark&amp;quot; /&amp;gt; 
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt; 
var username = dojo.byId('username').value 
alert(username); 
&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;OK，是不是和普通的js库一样，没有任何玄机？&lt;/p&gt;
&lt;h3&gt;dojo.addOnLoad&lt;/h3&gt;
&lt;p&gt;现在我们想在window.onload里面处理一点东西，就像Ext.onReady，这个东西在dojo里叫做dojo.addOnLoad&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;javascript&quot;&gt;dojo.&lt;span style=&quot;color: #006600;&quot;&gt;addOnLoad&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
    &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;var&lt;/span&gt; username = dojo.&lt;span style=&quot;color: #006600;&quot;&gt;byId&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'username'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;value&lt;/span&gt;   
    &lt;span style=&quot;color: #000066;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;username&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3&gt;dojo.connect&lt;/h3&gt;
&lt;p&gt;OK，window.onload搞定了，那么如何监听普通的dom事件呢？没问题，强大的dojo.connect出场&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;   
function sayHello(event)   
{   
    alert(&amp;quot;Hello&amp;quot;);   
}   
dojo.addOnLoad(function(){   
    var btn = dojo.byId('hello');   
    dojo.connect(btn,&amp;quot;onclick&amp;quot;,sayHello);   
});   
&amp;lt;/script&amp;gt;   
&amp;lt;input type=&amp;quot;button&amp;quot; id=&amp;quot;hello&amp;quot; value=&amp;quot;Hello&amp;quot; /&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;是不是和prototype的Event.observe($(&amp;#8217;btnAdd&amp;#8217;), &amp;#8220;load&amp;#8221;, doAdd)差不多?&lt;br /&gt;
用prototype时最烦的就是那个长长的bindAsListener了，使用dojo.conncect，可以在第三个参数中指定当前的scope：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;javascript&quot;&gt;&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;var&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt; = &lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;Mark&amp;quot;&lt;/span&gt;  
&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt; sayHello&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;   
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
    &lt;span style=&quot;color: #000066;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;Hello &amp;quot;&lt;/span&gt; + &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;   
&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;var&lt;/span&gt; obj = &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
    &lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;: &lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;Karl&amp;quot;&lt;/span&gt;  
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;   
dojo.&lt;span style=&quot;color: #006600;&quot;&gt;addOnLoad&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
    &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;var&lt;/span&gt; btn = dojo.&lt;span style=&quot;color: #006600;&quot;&gt;byId&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;'hello'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
    dojo.&lt;span style=&quot;color: #006600;&quot;&gt;connect&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;btn,&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;onclick&amp;quot;&lt;/span&gt;,obj,sayHello&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;//注意这行的第三个和第四个参数   &lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;OK，点击按钮，将输出：Hello Karl&lt;br /&gt;
这里dojo.connect的第三个参数变成了scope，而handler函数是第四个，实际上&lt;br /&gt;
dojo.connect(btn,&amp;#8221;onclick&amp;#8221;,sayHello);&lt;br /&gt;
与&lt;br /&gt;
dojo.connect(btn,&amp;#8221;onclick&amp;#8221;,null,sayHello);&lt;br /&gt;
相同。&lt;br /&gt;
更加复杂的用法这里不作介绍，写太多就越搞越复杂了，后面再写文章详细介绍dojo.connect，这里只简单介绍如何绑定DOM事件。&lt;/p&gt;
&lt;h3&gt;xmlhttp dojo.xhrGet&lt;/h3&gt;
&lt;p&gt;OK，介绍了简单的DOM操作方法，接下来该到Ajax的传统项目-XmlHttp了&lt;br /&gt;
在使用xmlhttp时，需要注意到编码的问题，要让dojo默认绑定为utf-8怎么办呢？很简单，只需要修改一下引入dojo.js时的标签：&lt;br /&gt;
&lt;span id=&quot;more-3&quot;&gt;&lt;/span&gt;&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;./dojo-lib/dojo/dojo.js&amp;quot; djConfig=&amp;quot;isDebug:true,bindEncoding:'UTF-8'&amp;quot;&amp;gt;
&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;多了一个djConfig属性，很简单，第一个isDebug是说是否打开FireBug的Console，第二个是xmlhttp使用的编码。第二个才是重点，设置了就一劳永逸了。 &lt;/p&gt;
&lt;p&gt;这次我们要点击了hello按钮后发出一个xmlhttp请求:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;javascript&quot;&gt;&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt; sayHello&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
    dojo.&lt;span style=&quot;color: #006600;&quot;&gt;xhrGet&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
        url: &lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;http://localhost/hello/sayHello.jsp&amp;quot;&lt;/span&gt;,   
        handleAs: &lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;text&amp;quot;&lt;/span&gt;,   
        load: &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;responseText&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;   
        &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
          &lt;span style=&quot;color: #000066;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;responseText&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
          dojo.&lt;span style=&quot;color: #006600;&quot;&gt;byId&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;divHello&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;innerHTML&lt;/span&gt; = responseText;   
        &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;,   
        error: &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;response&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;   
        &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
          &lt;span style=&quot;color: #000066;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;Error&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
        &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;   
    &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;   
dojo.&lt;span style=&quot;color: #006600;&quot;&gt;connect&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;btn,&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;onclick&amp;quot;&lt;/span&gt;,sayHello&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;看看，够不够一目了然？ &lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
url         就是url……&lt;br /&gt;
handleAs    把获取的内容作为text/html&lt;br /&gt;
load        成功时的回调函数&lt;br /&gt;
error       失败时的回调函数
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;那如果要传入参数怎么办?&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;javascript&quot;&gt;&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;var&lt;/span&gt; params = &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
    username:&lt;span style=&quot;color: #3366CC;&quot;&gt;'Mark'&lt;/span&gt;,   
    id:&lt;span style=&quot;color: #3366CC;&quot;&gt;'105'&lt;/span&gt;  
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;   
dojo.&lt;span style=&quot;color: #006600;&quot;&gt;xhrGet&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
    url: &lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;http://localhost/hello/sayHello.jsp&amp;quot;&lt;/span&gt;,   
    content:params,   
    &lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;//...   &lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;注意那个content参数，你要传入的参数是个关联数组/object，dojo会自动把参数解析出来，要使用post方法？&lt;br /&gt;
dojo.xhrGet &amp;#8212;&gt; dojo.xhrPost&lt;br /&gt;
其他的还有&lt;br /&gt;
dojo.xhrPut&lt;br /&gt;
dojo.xhrDelete&lt;/p&gt;
&lt;h4&gt;json&lt;/h4&gt;
&lt;p&gt;那要是我想更换获取到的数据类型，比如json？xml？&lt;br /&gt;
修改handleAs即可，如：&lt;br /&gt;
handleAs: &amp;#8220;json&amp;#8221;&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;javascript&quot;&gt;dojo.&lt;span style=&quot;color: #006600;&quot;&gt;xhrGet&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
    url: &lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;http://localhost/hello/sayHello.jsp&amp;quot;&lt;/span&gt;,   
    handleAs: &lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;json&amp;quot;&lt;/span&gt;,   
    load: &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;json&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;   
    &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
        &lt;span style=&quot;color: #000066;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;json.&lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;   
    &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;   
    &lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;//...   &lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;blockquote&gt;&lt;p&gt;
handleAs: &amp;#8220;json-comment-filtered&amp;#8221;   使用注释符号/**/把json数据包含起来,推荐使用&lt;br /&gt;
handleAs: &amp;#8220;json-comment-optional&amp;#8221;   首先尝试使用json-comment-filtered,如果执行错误,再使用普通的json格式解析&lt;br /&gt;
handleAs: &amp;#8220;javascript&amp;#8221;              dojo尝试把服务器返回的数据当作javascript执行,并把结果作为参数传递给load函数&lt;br /&gt;
handleAs: &amp;#8220;xml&amp;#8221;                     xml对象。注意在Mozilla和IE中的xml是不同的，推荐使用&lt;a href=&quot;http://sarissa.sourceforge.net/&quot;&gt;sarissa&lt;/a&gt;
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;至于json和object的转换等，在http://dojotoolkit.org/book/dojo-book-0-9/part-3-programmatic-dijit-and-dojo/other-miscellaneous-function/converting-json有一个表格，应该能找到你需要的。 &lt;/p&gt;
&lt;h4&gt;想要直接提交一个表单&lt;/h4&gt;
&lt;p&gt;,就这样:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;javascript&quot;&gt;dojo.&lt;span style=&quot;color: #006600;&quot;&gt;xhrGet&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
    url: &lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;http://localhost/hello/sayHello.jsp&amp;quot;&lt;/span&gt;,   
    form: dojo.&lt;span style=&quot;color: #006600;&quot;&gt;byId&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;form1&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;   
    &lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;//...   &lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;要解决IE下那个臭名昭著的缓存问题，就这样,preventCache会帮你自动生成一个timestamp&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;javascript&quot;&gt;dojo.&lt;span style=&quot;color: #006600;&quot;&gt;xhrGet&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
    url: &lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;http://localhost/hello/sayHello.jsp&amp;quot;&lt;/span&gt;,   
    preventCache: &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;true&lt;/span&gt;  
    &lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;//...   &lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3&gt;dojo.hitch scope/context&lt;/h3&gt;
&lt;p&gt;既然用到了xmlhttp，一个常见的问题就是回调函数的scope/context。在prototype、mootools里我们常用Function.bind，在dojo中，做相同事情的东西叫做dojo.hitch&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;javascript&quot;&gt;&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;var&lt;/span&gt; handler = &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
    &lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;:&lt;span style=&quot;color: #3366CC;&quot;&gt;'Mark'&lt;/span&gt;,   
    execute1: &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
        dojo.&lt;span style=&quot;color: #006600;&quot;&gt;xhrGet&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
            url: &lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;http://localhost/hello/sayHello.jsp&amp;quot;&lt;/span&gt;,   
            handleAs: &lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;text&amp;quot;&lt;/span&gt;,   
            error: &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;text&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;   
            &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
                console.&lt;span style=&quot;color: #006600;&quot;&gt;dir&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
                &lt;span style=&quot;color: #000066;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;//输出undefined,这里的this表示当前io参数   &lt;/span&gt;
            &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;   
            &lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;//...   &lt;/span&gt;
        &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
    &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;,   
    load: &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;text&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
        &lt;span style=&quot;color: #000066;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
    &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;,   
    execute2: &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
        dojo.&lt;span style=&quot;color: #006600;&quot;&gt;xhrGet&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
            url: &lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;http://localhost/hello/sayHello.jsp&amp;quot;&lt;/span&gt;,   
            handleAs: &lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;text&amp;quot;&lt;/span&gt;,   
            error: dojo.&lt;span style=&quot;color: #006600;&quot;&gt;hitch&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;this&lt;/span&gt;,&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;load&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;//输出Mark    &lt;/span&gt;
            &lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;//error: dojo.hitch(this,this.load); //与上一句相同,知道为什么要用方法名字而不是引用了吧?省去了长长的一串this.xxx   &lt;/span&gt;
            &lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;//...   &lt;/span&gt;
        &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
    &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;OK，基本的东西解决了，还有很多常用的函数没有介绍，比如：dojo.query，dojo.forEach，dojo.marginBox，dojo.contentBox等等&lt;br /&gt;
这个就没事翻翻dojo.js.uncompressed.js源代码，dojo的文档是没啥好指望的了。&lt;/p&gt;
&lt;h2&gt;面向对象,定义Class&lt;/h2&gt;
&lt;p&gt;下一步我们看看dojo里&lt;br /&gt;
&lt;h4&gt;如何定义Class&lt;/h4&gt;
&lt;p&gt;：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;javascript&quot;&gt;dojo.&lt;span style=&quot;color: #006600;&quot;&gt;declare&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;Customer&amp;quot;&lt;/span&gt;,&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;null&lt;/span&gt;,&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
    constructor:&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
        &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt; = &lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;;   
    &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;,   
    say:&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
        &lt;span style=&quot;color: #000066;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;Hello &amp;quot;&lt;/span&gt; + &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
    &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;,   
    getDiscount:&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
        &lt;span style=&quot;color: #000066;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;Discount is 1.0&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
    &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;   
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
&amp;nbsp;
&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;var&lt;/span&gt; customer1 = &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;new&lt;/span&gt; Customer&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;Mark&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
customer1.&lt;span style=&quot;color: #006600;&quot;&gt;say&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;declare有三个参数: &lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
第一个 class名字&lt;br /&gt;
第二个 父类的引用&lt;br /&gt;
第三个 &amp;#8230;
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;构造函数&lt;/strogn&gt;的名字就叫做&amp;#8221;construnctor&amp;#8221;&lt;/p&gt;
&lt;h4&gt;再来看看如何继承:&lt;/h4&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;javascript&quot;&gt;dojo.&lt;span style=&quot;color: #006600;&quot;&gt;declare&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;VIP&amp;quot;&lt;/span&gt;,Customer,&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
    getDiscount:&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
        &lt;span style=&quot;color: #000066;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;Discount is 0.8&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
    &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;   
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;var&lt;/span&gt; vip = &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;new&lt;/span&gt; VIP&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;Mark&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
vip.&lt;span style=&quot;color: #006600;&quot;&gt;say&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
vip.&lt;span style=&quot;color: #006600;&quot;&gt;getDiscount&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;那么，如何&lt;strogn&gt;调用父类的方法&lt;/strong&gt;呢。使用this.inherited方法&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;javascript&quot;&gt;dojo.&lt;span style=&quot;color: #006600;&quot;&gt;declare&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;VIP&amp;quot;&lt;/span&gt;,Customer,&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
    getDiscount:&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
        &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;inherited&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;arguments&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
        &lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;//this.inherited(&amp;quot;getDiscount&amp;quot;,arguments);   &lt;/span&gt;
    &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;   
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4&gt;关于构造函数: &lt;/h4&gt;
&lt;p&gt;父类构造函数总是被自动调用的，所以看下面的例子:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;javascript&quot;&gt;dojo.&lt;span style=&quot;color: #006600;&quot;&gt;declare&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;Customer&amp;quot;&lt;/span&gt;,&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;null&lt;/span&gt;,&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
    constructor:&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
        &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt; = &lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;;   
        &lt;span style=&quot;color: #000066;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;base class&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
    &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;,   
    say:&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
        &lt;span style=&quot;color: #000066;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
    &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;   
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
&amp;nbsp;
dojo.&lt;span style=&quot;color: #006600;&quot;&gt;declare&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;VIP&amp;quot;&lt;/span&gt;,Customer,&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
    constructor:&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;age&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
        &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;age&lt;/span&gt; = age;   
        &lt;span style=&quot;color: #000066;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;child class&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
    &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;,   
    say:&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
        &lt;span style=&quot;color: #000066;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;name:&amp;quot;&lt;/span&gt; + &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
        &lt;span style=&quot;color: #000066;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;age:&amp;quot;&lt;/span&gt; + &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;age&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
    &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;   
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
&amp;nbsp;
&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;var&lt;/span&gt; vip = &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;new&lt;/span&gt; VIP&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;123&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;//1   &lt;/span&gt;
vip.&lt;span style=&quot;color: #006600;&quot;&gt;say&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;//2&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;blockquote&gt;&lt;p&gt;
1将打印出两条alert语句，先是父类的构造函数，再是子类的。&lt;br /&gt;
2将输出&amp;#8221;name: 123&amp;#8243; &amp;#8220;age: 123&amp;#8243;
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;个人认为，这个特性并不好，因为javascript这种弱类型的语言中，根本无法确定构造函数中的参数是传递给谁的，就比如上面的语句执行后，name=&amp;#8221;123&amp;#8243;,age=&amp;#8221;123&amp;#8243;，那哪个才是正确的？这个问题在使用dojo Grid的model里就很麻烦，定义一个model得这样:new dojox.grid._data.Table(null,null,data);我要是想扩展这个Model，更麻烦，所有子类的构造函数都被父类给搞乱了。所以推荐的做法是使用关联数组作为构造函数的参数，就像Python里的关键字参数。&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;javascript&quot;&gt;constructor:&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;args&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
    &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;var&lt;/span&gt; args = args &lt;span style=&quot;color: #66cc66;&quot;&gt;||&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;;   
    &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt; = args.&lt;span style=&quot;color: #000066;&quot;&gt;name&lt;/span&gt;;   
    &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;age&lt;/span&gt; = args.&lt;span style=&quot;color: #006600;&quot;&gt;age&lt;/span&gt;;   
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4&gt;多继承,mixin&lt;/h4&gt;
&lt;p&gt;说到继承，多继承的问题又来了。dojo支持多继承，准确地说，是mixin。还记得dojo.declare的第二个参数吗，就是表示父类的那个参数，这个参数可以是一个数组，数组的第一个元素作为声明的类的父类，其他的作为mixin。子类自动获得父类和mixin的所有方法，后面的mixin的同名方法覆盖前面的方法&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;javascript&quot;&gt;dojo.&lt;span style=&quot;color: #006600;&quot;&gt;declare&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;Customer&amp;quot;&lt;/span&gt;,&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;null&lt;/span&gt;,&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
    say:&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
        &lt;span style=&quot;color: #000066;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;Hello Customer&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
    &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;,   
    getDiscount:&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
        &lt;span style=&quot;color: #000066;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;Discount in Customer&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
    &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
dojo.&lt;span style=&quot;color: #006600;&quot;&gt;declare&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;MixinClass&amp;quot;&lt;/span&gt;,&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;null&lt;/span&gt;,&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
    say:&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
        &lt;span style=&quot;color: #000066;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;Hello mixin&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
    &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;,   
    foo:&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
        &lt;span style=&quot;color: #000066;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;foo in MixinClass&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
    &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;   
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
dojo.&lt;span style=&quot;color: #006600;&quot;&gt;declare&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&amp;quot;VIP&amp;quot;&lt;/span&gt;,&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;Customer,MixinClass&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;,&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;   
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;var&lt;/span&gt; vip = &lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;new&lt;/span&gt; VIP&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
vip.&lt;span style=&quot;color: #006600;&quot;&gt;getDiscount&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
vip.&lt;span style=&quot;color: #006600;&quot;&gt;foo&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;   
vip.&lt;span style=&quot;color: #006600;&quot;&gt;say&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;span style=&quot;color: #009900; font-style: italic;&quot;&gt;//输出&amp;quot;Hello MixinClass&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;其他的比较有用的函数就是dojo.mixin和dojo.extend了，顾名思义，一个是作用于对象实例，一个是用于扩展class，翻文档和源码吧。&lt;/p&gt;
&lt;h2&gt;package机制&lt;/h2&gt;
&lt;p&gt;说完了dojo里的类继承机制，不得不说说package机制。&lt;br /&gt;
主要用到的有&lt;br /&gt;
dojo.require&lt;br /&gt;
dojo.provide&lt;br /&gt;
dojo.registerModulePath &lt;/p&gt;
&lt;h4&gt;dojo.require&lt;/h4&gt;
&lt;p&gt;dojo.require就是引入相应路径文件下的js文件，现在已经有很多library这样做了。现在我们假设要用&lt;br /&gt;
project/dojo-lib/dojo/string.js &lt;/p&gt;
&lt;p&gt;dojo中的顶层目录就是dojo.js所在目录的上一层,即&amp;#8221;project/dojo-lib/&amp;#8221;，而dojo.js放在&lt;br /&gt;
project/dojo-lib/dojo/dojo.js&lt;br /&gt;
所以我们就这样:&lt;br /&gt;
dojo.require(&amp;#8221;dojo.string&amp;#8221;);&lt;br /&gt;
比如要引用其他目录下的:&lt;br /&gt;
project/dojo-lib/dojox/dtl/_base.js，则这样：dojo.require(&amp;#8221;dojox.dtl._base&amp;#8221;); &lt;/p&gt;
&lt;p&gt;project/dojo-lib/dojox/grid/Grid.js dojo.require(&amp;#8221;dojox.grid.Grid&amp;#8221;); &lt;/p&gt;
&lt;p&gt;说白了，就和ruby之类的require很相似。&lt;/p&gt;
&lt;h4&gt;dojo.provide&lt;/h4&gt;
&lt;p&gt;要自己编写一个package怎么办，那就利用dojo.provide。比如要写在：&lt;br /&gt;
project/dojo-lib/com/javaeye/fyting/Package1.js&lt;br /&gt;
那么在对应的Package1.js中第一行需要这样写:&lt;br /&gt;
dojo.provide(&amp;#8221;com.javaeye.fyting.Package1&amp;#8243;); &lt;/p&gt;
&lt;p&gt;类似java里的package声明，是吧？&lt;/p&gt;
&lt;h4&gt;dojo.registerModulePath&lt;/h4&gt;
&lt;p&gt;那要是我写的js文件不想和dojo放在一起怎么办呢，那就用registerModulePath。假设要放在：&lt;br /&gt;
project/js/com/javaeye/fyting/Package2.js &lt;/p&gt;
&lt;p&gt;Package2.js和上面的Package1.js一样的写法，不需要作特殊变化，就这样就行：&lt;br /&gt;
dojo.provide(&amp;#8221;com.javaeye.fyting.Package2&amp;#8243;); &lt;/p&gt;
&lt;p&gt;在使用时，需要指名这个Package2.js所在的位置，&lt;br /&gt;
dojo.registerModulePath(&amp;#8221;com&amp;#8221;,&amp;#8221;../../js/com&amp;#8221;);&lt;br /&gt;
只需要注意这里的相对路径是相对dojo.js来的。 &lt;/p&gt;
&lt;p&gt;我们假设所有以com.javaeye开头的js都放在一起，而com.microsoft的放在另外的地方，为了防止冲突，可以这样:&lt;br /&gt;
dojo.registerModulePath(&amp;#8221;com.javaeye&amp;#8221;,&amp;#8221;../../js/com/javaeye&amp;#8221;);&lt;br /&gt;
dojo.registerModulePath(&amp;#8221;com.microsoft&amp;#8221;,&amp;#8221;../../javascript/com/microsoft&amp;#8221;); &lt;/p&gt;
&lt;p&gt;总得来说，package机制是开发大型项目必须的，但是造成了调试困难，使用dojo.require引入js出错时，根本不知道是什么原因，所以调试时最好手动引入js，dojo的test也是这么搞的。还有js框架中的各种实现类继承的手法，也造成调试困难，dojo还随地抛出个Error，又缺少java那样的error statck，根本不知道错误根源在哪儿。所以，期待js原生地支持这些^^&lt;br /&gt;
完整的代码文件在附件里，一个是含有dojo-1.0.2的，一个是没有dojo的&lt;br /&gt;
&lt;a href=&quot;http://fyting.javaeye.com/topics/download/847ce46f-b58c-46e1-b99c-cedbf941e6e3&quot;&gt;samples-without-dojo.zip&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://fyting.javaeye.com/topics/download/0e22d6e8-d726-4fc9-ad9d-142e5ab41f06&quot;&gt;samples-with-dojo.zip&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.fyting.com/post/3/feed</wfw:commentRss><description>以前的文章了，先转过来凑数，以后将只在这里更新~~~
原作者: Kenny 转载请注明出自  http://www.fyting.com,谢谢
2006年初，dojo还是0.22的时候就很关注它的发展，可一直没有在实际项目中使用。一来是由于文档的缺少，而来是dojo的相关介绍总是让人望而生畏。到现在都如此，第一个hello world就搞了一大堆东西，比如widget组件，自定义的script标签等，加上要引入什么css文件，djConfig、dojo.require等等，让人很迷惑，这么复杂，到底dojo该怎么使用呢？我只是想把dojo当作一个普通的js类库，就像prototype那样？OK，闲话少说，来看看如何使用dojo。
首先，引入dojo.js
dojo的发行包里有4个子目录
假设你是这样的目录结构: 

project
&amp;#124;
+&amp;#8211;dojo-lib
&amp;#124; &amp;#124;
&amp;#124; +&amp;#8211;dijit
&amp;#124; +&amp;#8211;dojo
&amp;#124; +&amp;#8211;dojox
&amp;#124; +&amp;#8211;util
&amp;#124;
+&amp;#8211;dojo_hello_world.html

要引入的文件是名叫&amp;#8221;dojo&amp;#8221;的子目录里的dojo.js

&amp;#60;script type=&amp;#34;text/javascript&amp;#34; src=&amp;#34;./dojo-lib/dojo/dojo.js&amp;#34;&amp;#62;
&amp;#60;/script&amp;#62;

开始使用dojo
现在开始使用dojo的第一个函数:dojo.byId
dojo.byId就等同于常用的document.getElementById

&amp;#60;input type=&amp;#34;text&amp;#34; name=&amp;#34;username&amp;#34; id=&amp;#34;username&amp;#34; value=&amp;#34;Mark&amp;#34; /&amp;#62; 
&amp;#60;script type=&amp;#34;text/javascript&amp;#34;&amp;#62; 
var username = dojo.byId('username').value 
alert(username); 
&amp;#60;/script&amp;#62;

OK，是不是和普通的js库一样，没有任何玄机？
dojo.addOnLoad
现在我们想在window.onload里面处理一点东西，就像Ext.onReady，这个东西在dojo里叫做dojo.addOnLoad

dojo.addOnLoad&amp;#40;function&amp;#40;&amp;#41;&amp;#123;   
    var username = dojo.byId&amp;#40;'username'&amp;#41;.value   
    alert&amp;#40;username&amp;#41;;   
&amp;#125;&amp;#41;;

dojo.connect
OK，window.onload搞定了，那么如何监听普通的dom事件呢？没问题，强大的dojo.connect出场

&amp;#60;script type=&amp;#34;text/javascript&amp;#34;&amp;#62;   
function sayHello(event)   
{ [...]</description><category>dojo</category><category>webdev</category><pubDate>Tue, 01 Jan 2008 17:34:48 +0800</pubDate><author>Kenny</author><comments>http://www.fyting.com/post/3#comments</comments><guid isPermaLink="false">http://www.fyting.com/?p=3</guid><dc:creator>Kenny</dc:creator><fs:srclink>http://www.fyting.com/post/3</fs:srclink><fs:srcfeed>http://www.fyting.com/feed</fs:srcfeed><fs:itemid>feedsky/fyting/~7018591/117246441/1487593</fs:itemid></item></channel></rss>