标题：Dojo构建Ajax应用程序
Dojo构建Ajax应用程序
（ 美）James E.Harmon著
开发人员专业技术丛书
【作　者】James E. Harmon
【译　者】 张龙
【出 版 社】 机械工业出版社 
【书 号】9787111266648
【出版日期】2009年6月
译者序
Dojo、ExtJS、DWR、YUI、GWT、Prototype、ZK……面对这么多的Ajax框架（或库），初学者难免不知所措，我们到底该学习哪个？我想说的是，首先学习JavaScript，因为不管哪个Ajax框架，其根基始终离不开JavaScript，只有将JavaScript掌握好了才可能走得更远，更快。那么，学习JavaScript哪些内容呢？面向对象、闭包、事件模型、DOM等都是我们必须掌握的，只有这样才不会被一个又一个新的Ajax框架所累，才能真正凌驾于框架之上达到灵活运用的目的。
我从2006年就已经开始使用Dojo，那时的版本为0?43（这也是Dojo的一个经典版本），当时关于Dojo的资料非常少，甚至连官方网站的帮助文档也不够完善，迫不得已，只有阅读Dojo的源代码。从Dojo 1?0开始，Dojo的核心已经发生了重大的变化并且与之前的版本不再兼容；但万变不离其宗，其架构、思想还是有相通之处的。本书讲述的Dojo版本为1?1，我相信只要读者掌握好了该版本，就可以轻松应对以后的版本升级了。
本书共分为三大部分，共十七章。其中第一部分提供了Dojo的初学者指南，帮助大家尽快走进Dojo的世界。第二部分重点介绍了DojoWidget，这也是Dojo最重要的组成部分，期间以表格的形式给出了各Widget的用法示例及相关属性、方法与事件等，读者也可以将这部分内容当作参考手册，随用随查。第三部分深入讲解了Dojo的方方面面，从对象与类到测试与调试，通过这一部分的学习将极大提高读者应用Dojo和JavaScript的技能。
从接手本书的翻译到交付出版经过了4个多月的时间，在这期间我集中了所有精力完成这本专著的翻译，不敢懈怠。
感谢我的父母！感谢你们的培养和教育。感谢我的女友张明辉！在翻译此书的这段日子里，是你无微不至的关怀让我忘却了生活中的琐事，专心于译作。
不得不提的还有华章公司的陈冀康先生，是你的不断鼓励与帮助，给了我完成此书翻译的信心和勇气，谢谢。
限于译者水平，书中难免有不妥之处，如读者在阅读本书的过程中发现了任何问题或是有任何建议，望与我联系。联系方式如下：
序
学习DojoToolkit时至少要清楚一点——你想要的是什么！在刚开始使用Dojo时，我的基本目标就是创建一个有用的JavaScript工具集而不必让专业的JavaScript开发者重复发明轮子。术语Ajax的出现掀起了一阵旋风，我们很快就发现自己创建的这个工具集被数以千计的开发者和上百万的用户所使用。
就像那些发展速度远远超出想象的项目和公司一样，痛苦始终是伴我们左右的。Dojo团队花费了将近18个月的时间来解决其快速发展所带来的问题：性能、范围、易用性及文档。从市场和文档的角度来看，开源项目的名声并不好，最开始Dojo也无法摆脱这个宿命。在发布了Dojo0?9、1?0及1?1之后，我们对文档和API查看工具进行了极大的改进，现在我们可以自豪地说这些内容已经不会再给Dojo抹黑了。
除了源代码文档外，精彩的示例也是一本好书不可或缺的组成部分。在学习新东西时，最困难之处在于你不知道如何提出问题。Dojo是非常强大和高效的，但这也会导致一些Dojo新手无从下手。无论是狭义的Dojo还是广义的Ajax都会有一些学习曲线，你需要具有宽广的技术背景——从服务器端的编程语言到JavaScript、CSS、HTML及DOM都需要掌握，外加上浏览器之间的一些不兼容特性。类似于Dojo这样的工具集会尽最大努力帮助开发者摆脱这么多问题的困扰，但当开发者面对新问题时还是不可避免地会遇到很多麻烦。
Dojo开发者和用户可以采取很多方式去解决问题并加快脚步，可以阅读本书，也可以求助于社区，甚至还可以寻求SitePen这样的商业公司的帮助。
Dojo已经获得了成功并在茁壮成长，这是由其透明和开放的进程所决定的。所有代码都基于AFL和BSD协议，这两个协议的目的在于让广大用户能更好地使用而不是限制其使用。
很多个人与公司都对Dojo做出了巨大的贡献，如AOL、Google、IBM、Nexaweb、Renkoo、SitePen、Sun及WaveMaker等。我们有一个严格但低门槛的贡献政策（contribution policy），它要求所有贡献的源代码都要通过一个贡献协议协定（Contributor License Agreement），这样就能保证现在和将来对Dojo地使用不会导致法律或专利上的问题。
相对于其他工具集，我们进行了更多的创新和试验，在DojoX中引入的新特性已经遥遥领先于其他工具集。
我与James Harmon相识在一次会议上，那时他正在进行关于Dojo的讲座。James对Dojo深入浅出地介绍非常精彩。Alex Russell和我总是想面面俱到地将Dojo介绍给别人，而James却能将复杂的主题分解为易于理解的概念，这样人们就能快速掌握Dojo了。
本书同样以清晰明了的方式介绍了如何使用Dojo轻松创建Web应用和Web站点，即使开发者不是JavaScript专家也没有关系，凭借Dojo Toolkit，他们可以快速且高效地进行开发。Dylan Schiemann
CEO，SitePen
联合创始人，Dojo Toolkit
致谢
只把我的名字列在本书的封面上显得太不合时宜了。本书是集体智慧的结晶，我对为本书作出贡献的所有人表示深深地敬意。首先，感谢本书的编辑Debra Williams Cauley，他以其专业的知识指导我完成本书的编写，同时还给予我很多建议。
感谢Prentice-Hall的Debra团队，包括直接与我打交道的Chelsey Marti、Chrissy White及Michael Thurston，还有那些幕后工作者。Eric Foster-Johnson也为本书提出了很多有价值的建议。
要是没有Dojo Framework也不会有关于Dojo的书。感谢那些为该项目作出贡献和长久以来帮助过我的人们，包括Dylan Schiemann、Alex Russell、Karl Tiedt、Adam Peller、Becky Gibson、Sam Foster、Ben Lowery和James Burke，要感谢 的人太多了，恕我不能一一列举。
感谢我的伙伴们，他们给予我很多建议，包括：Ted Rafacz、Max Rahder、Steve Meshner、Bob Phifer和Will Provost。感谢我的技术偶像：Douglas Crockford、Jesse James Garret还有Ajaxian?com的那帮家伙，是他们让我着迷于Ajax和JavaScript。
特别要感谢我亲爱的妻子Sonia，为了能让我安心写书，她独自一人承担了很多。没有你就没有这本书。你的支持永远是我灵感的来源。我爱你。
关于作者
James E?Harmon是芝加哥Object Training Group的校长和高级讲师。他是一名资深的开发者，主要在埃森哲（Accenture）和其他几个Web咨询公司开发大型的在线应用，现在专注于通过最新的技术和框架对Java开发者进行培训。
目录
译者序
序
第一部分Dojo教程
第1章理解Dojo：教程
1.1教程简介
1.1.1本教程的目标
1.1.2使用Dojo的目的
1.2一个标准的HTML数据输入表单
1.2.1First与Last Name
1.2.2用户名
1.2.3Email地址
1.2.4地址
1.2.5州
1.2.6城市
1.2.7邮政编码
1.2.8服务日期
1.2.9评论
1.3改进表单的计划
1.3.1在表单中引入Dojo
1.3.2增加客户端验证
1.3.3增加服务器端特性
1.3.4使用专门的Dojo widget
1.3.5处理表单
1.4获取并运行源代码
1.5教程步骤1——引入Dojo
1.5.1下载或是创建源文件
1.5.2引入DojoToolkit
1.5.3引入Dojo样式表
1.5.4回顾所有的代码变化
1.5.5运行新页面
第2章使用Dojo进行客户端验证
2.1验证表单字段
2.2教程步骤2——增加客户端验证
2.2.1验证First Name字段
2.2.2验证Last Name字段
2.2.3验证用户名字段
2.2.4验证Email地址字段
2.2.5验证地址字段
2.2.6验证城市字段
2.2.7验证邮编字段
第3章使用Dojo与服务器端
协同工作
3.1增加服务器端特性
3.2教程步骤3a——增加服务器端验证
3.2.1指定事件处理函数
3.2.2对服务器端进行调用
3.3教程步骤3b——从服务器端接收
数据
3.3.1为城市字段选择恰当的Widget
3.3.2获得州的值并将其发送到
服务器端
第4章使用Dojo Widget
4.1将Dojo widget增加到页面中
Dijit——Dojo Widget模块
4.2教程步骤4——使用Dojo Widget
4.2.1使用Dojo DateTextBox Widget
4.2.2使用Dojo富文本编辑器Widget
第5章使用Dojo处理表单
5.1使用Dojo处理表单
5.2教程步骤5——处理表单
5.2.1创建Dojo Form. Widget
5.2.2对表单提交进行拦截
5.2.3检查表单中所有元素的合法性
5.2.4将表单提交到服务器端
第二部分Dojo Widget
第6章Dojo Widget简介
6.1Widget是什么
6.2Dojo Widget是什么
6.3构成Dojo Widget的组件
6.3.1Widget HTML
6.3.2Widget样式
6.3.3Widget的JavaScript组件
6.3.4Dojo Widget的继承
6.3.5Dojo Widget概览
6.3.6构建自己的Widget
第7章Dojo Form. Widget
7.1标准的Form和Dojo Form. Widget
dijit.form._FormWidget类
7.2详解Dojo Form. Widget
第8章Dojo Layout Widget
8.1理解页面布局
dijit.layout._LayoutWidget类
8.2Dojo Layout Widget简介
第9章其他专门的Dojo Widget
9.1什么是专门的widget
9.2Menu Widget
9.2.1dijit.Menu
9.2.2dijit.MenuItem
9.2.3dijit.MenuSeparator
9.2.4dijit.PopupMenuItem
第三部分Dojo详解
第10章Dojo是什么
10.1JavaScript和AJAX的历史
10.2Dojo的历史
10.3Dojo的目标
10.4Dojo简介
10.5Dojo解决了哪些问题
10.6谁应该使用Dojo
10.7协议
10.8竞争者和替代者
10.9Dojo的未来
第11章Dojo的技术描述
11.1Dojo下载包中有什么
11.2Dojo源代码的组织
11.2.1顶层目录
11.2.2深入Dojo目录
11.3Dojo模块和特性
11.3.1命名约定和命名空间
11.3.2DojoBase模块
11.3.3Dojo核心模块
第12章对象与类
12.1对象探究
12.1.1创建对象
12.1.2封装
12.1.3对象模板
12.1.4JavaScript的原型
12.2使用Dojo处理对象
Dojo函数：dojo.declare
12.3定义类
12.3.1父类和继承
12.3.2dojo.declare的API
12.3.3Dojo的其他函数
12.3.4对象图和“.”符号
第13章String与JSON
13.1文本字符串
13.1.1Dojo函数：dojo.string.pad
13.1.2dojo.string.pad使用示例
13.1.3Dojo函数：dojo.string.
substitute
13.1.4dojo.string.substitute使用
示例
13.2JSON
13.2.1Dojo函数dojo.toJson
13.2.2dojo.toJson使用示例
13.2.3Dojo函数：dojo.fromJson
第14章事件与事件处理
14.1事件模型简介
14.1.1什么是事件
14.1.2额外的Dojo事件
14.2定义并指定事件处理器
14.2.1使用dojo.connect指定事件
处理器
14.2.2指定事件处理器示例
14.3将事件表示为对象
14.4在Dojo中使用面向方面的编程
第15章Ajax Remoting
15.1Remoting
15.2XMLHttpRequest回顾
15.3dojo.xhrGet函数
参数详解
15.4dojo.xhrPost
使用示例——错误处理
15.5处理表单
15.51Dojo函数dojo.formToObject
15.5.2Dojo函数dojo.objectToQuery
15.5.3Dojo函数dojo.formToQuery
15.5.4Dojo函数dojo.formToJson
15.5.5Dojo函数dojo.queryToObject
第16章处理DOM
16.1DOM抽丝剥茧
16.2Dojo查询
16.2.1CSS选择器
16.2.2在dojo.query中使用选择器
16.2.3使用dojo.query找到的DOM
元素
16.3动画
16.3.1理解动画
16.3.2Dojo动画函数
16.3.3标准的动画效果
第17章测试与调试
17.1测试
17.1.1单元测试
17.1.2DOH——Dojo单元测试框架
17.1.3其他类型的测试
17.2日志
17.2.1基本日志
17.2.2高级日志