译者序 1
序 1
第一部分 Dojo教程 1
第1章 理解Dojo:教程 1
1.1 教程简介 1
1.1.1 本教程的目标 2
1.1.2 使用Dojo的目的 2
1.2 一个标准的HTML数据输入表单 3
1.2.1 First与Last Name 4
1.2.2 用户名 5
1.2.3 Email地址 5
1.2.4 地址 6
1.2.5 州 6
1.2.6 城市 7
1.2.7 邮政编码 8
1.2.8 服务日期 8
1.2.9 评论 9
1.3 改进表单的计划 10
1.3.1 在表单中引入Dojo 10
1.3.2 增加客户端验证 10
1.3.3 增加服务器端特性 11
1.3.4 使用专门的Dojo widget 11
1.3.5 处理表单 11
1.4 获取并运行源代码 12
1.5 教程步骤1—引入Dojo 12
1.5.1 下载或是创建源文件 12
1.5.2 引入Dojo Toolkit 16
1.5.3 引入Dojo样式表 17
1.5.4 回顾所有的代码变化 18
1.5.5 运行新页面 19
第2章 使用Dojo进行客户端验证 20
2.1 验证表单字段 20
2.2 教程步骤2—增加客户端验证 21
2.2.1 验证FirstName字段 21
2.2.2 验证LastName字段 25
2.2.3 验证用户名字段 25
2.2.4 验证Email地址字段 26
2.2.5 验证地址字段 27
2.2.6 验证城市字段 27
2.2.7 验证邮编字段 27
第3章 使用Dojo与服务器端协同工作 30
3.1 增加服务器端特性 30
3.2 教程步骤3a增加服务器端验证 30
3.2.1 指定事件处理函数 31
3.2.2 对服务器端进行调用 33
3.3 教程步骤3b—从服务器端接收数据 37
3.3.1 为城市字段选择恰当的Widget 38
3.3.2获得州的值并将其发送到服务器端 39
第4章 使用Dojo Widget 45
4.1 将Dojo widget增加到页面中Dijit-Dojo Widget模块 45
4.2 教程步骤4—使用Dojo Widget 46
4.2.1 使用Dojo DateTextBox Widget 46
4.2.2 使用Dojo富文本编辑器Widget 49
第5章 使用Dojo处理表单 53
5.1 使用Dojo处理表单 53
5.2 教程步骤5—处理表单 54
5.2.1 创建Dojo Form Widget 54
5.2.2 对表单提交进行拦截 55
5.2.3 检查表单中所有元素的合法性 55
5.2.4 将表单提交到服务器端 56
第二部分 Dojo Widget 59
第6章 Dojo Widget简介 59
6.1 Widget是什么 59
6.2 Dojo Widget是什么 60
6.3 构成Dojo Widget的组件 62
6.3.1 Widget HTML 62
6.3.2 Widget样式 65
6.3.3 Widget的JavaScript组件 67
6.3.4 Dojo Widget的继承 69
6.3.5 Dojo Widget概览 72
6.3.6 构建自己的Widget 77
第7章 Dojo Form Widget 78
7.1 标准的Form和Dojo Form Widget 78
dijit.form._FormWidget类 79
7.2 详解Dojo Form Widget 80
第8章 Dojo Layout Widget 108
8.1 理解页面布局 108
dijit.layout._LayoutWidget类 108
8.2 Dojo Layout Widget简介 110
第9章 其他专门的Dojo Widget 123
9.1 什么是专门的widget 123
9.2 Menu Widget 123
9.2.1 dijit.Menu 124
9.2.2 dijit.MenuItem 124
9.2.3 dijit.MenuSeparator 125
9.2.4 dijit.PopupMenuItem 125
第三部分 Dojo详解 145
第10章 Dojo是什么 145
10.1 JavaScript和AJAX的历史 145
10.2 Dojo的历史 147
10.3 Dojo的目标 147
10.4 Dojo简介 147
10.5 Dojo解决了哪些问题 149
10.6 谁应该使用Dojo 149
10.7 协议 150
10.8 竞争者和替代者 150
10.9 Dojo的未来 151
第11章 Dojo的技术描述 153
11.1 Dojo下载包中有什么 153
11.2 Dojo源代码的组织 154
11.2.1 顶层目录 154
11.2.2 深入Dojo目录 155
11.3 Dojo模块和特性 157
11.3.1 命名约定和命名空间 157
11.3.2 Dojo Base模块 158
11.3.3 Dojo核心模块 167
第12章 对象与类 171
12.1 对象探究 171
12.1.1 创建对象 171
12.1.2 封装 172
12.1.3 对象模板 173
12.1.4 JavaScript的原型 174
12.2 使用Dojo处理对象 175
Dojo函数:dojo declare 176
12.3 定义类 177
12.3.1 父类和继承 178
12.3.2 dojo.declare的API 378
12.3.3 Dojo的其他函数 179
12.3.4 对象图和“.”符号 179
第13章 String与JSON 183
13.1 文本字符串 183
13.1.1 Dojo函数:dojo.string.pad 183
13.1.2 dojo.string.pad使用示例 184
13.1.3 Dojo函数:dojo.string.substitute 184
13.1.4 dojo.string.substitute使用示例 186
13.2 JSON 187
13.2.1 Dojo函数dojo.toJson 188
13.2.2 dojo.toJson使用示例 189
13.2.3 Dojo函数:dojo.fromJson 190
第14章 事件与事件处理 192
14.1 事件模型简介 192
14.1.1 什么是事件 192
14.1.2 额外的Dojo事件 194
14.2 定义并指定事件处理器 194
14.2.1 使用dojo.connect指定事件处理器 195
14.2.2 指定事件处理器示例 195
14.3 将事件表示为对象 196
14.4 在Dojo中使用面向方面的编程 197
第15章 Ajax Remoting 200
15.1 Remoting 200
15.2 XMLHttpRequest回顾 201
15.3 dojo.xhrGet函数 202
参数详解 203
15.4 dojo.xhrPost 204
使用示例―错误处理 207
15.5 处理表单 208
15.5.1 Dojo函数dojo.formToObject 208
15.5.2 Dojo函数dojo.objectToQuery 209
15.5.3 Dojo函数dojo.fomToQuery 210
15.5.4 Dojo函数dojo.formToJson 211
15.5.5 Dojo函数dojo.queryToObject 212
第16章 处理DOM 214
16.1 DOM抽丝剥茧 214
16.2 Dojo查询 214
16.2.1 CSS选择器 215
16.2.2 在dojo.query中使用选择器 218
16.2.3 使用dojo.query找到的DOM元素 219
16.3 动画 219
16.3.1 理解动画 219
16.3.2 Dojo动画函数 221
16.3.3 标准的动画效果 222
第17章 测试与调试 229
17.1 测试 229
17.1.1 单元测试 230
17.1.2 DOH-Dojo单元测试框架 230
17.1.3 其他类型的测试 233
17.2 日志 234
17.2.1 基本日志 234
17.2.2 高级日志 235