第1章 导论 1
1.1 Dojo的一些主要方面 3
1.1.1 Dojo不只是一个程序库,而是一个工具包 3
1.1.2 Dojo着眼于广大的用户群 4
1.1.3 Dojo是面向未来的 4
1.1.4 Dojo是开源的 4
1.1.5 Dojo分为三个项目 5
1.1.6 Dojo具有高度的概念完整性 5
1.2 如何使用本书 6
1.2.1 预备知识 6
1.2.2 示例代码 6
1.2.3 关于调试 6
1.2.4 本书大纲 7
1.3 致谢 7
第一部分 用Dojo玩转Ajax 10
第2章 轻松创建功能强大的Web表单 10
2.1 顾客如何评价传统表单 10
2.2 在服务器上安装Dojo 11
2.3 把Dojo和Dijit添加到网页 11
2.4 表单的布局 14
2.4.1 准备页面 14
2.4.2 用选项卡来组织表单 15
2.4.3 有问题吗 17
2.5 增强表单控制 19
2.5.1 验证字段 19
2.5.2 简单输入日期 20
2.6 组合起来 20
第3章 连接外部服务 23
3.1 Dojo远程脚本 23
3.2 与调用XHR相关的JavaScript习惯用语 24
3.2.1 字面量和散列 24
3.2.2 函数字面量 27
3.3 使用dojo.data和dojox.grid.Grid的Wish List 29
3.3.1 JSON语言 31
3.3.2 存根数据源 32
3.3.3 数据可用的小部件,dojox.grid.Grid 34
3.4 使用JSONP研究雪茄 37
3.4.1 网格和事件 39
3.4.2 XHR回调 40
3.5 使用dojo.xhrGet实现评论系统 42
3.6 错误与调试 45
第二部分 Dojo API 50
第4章 深入Dojo 50
4.1 模块化JavaScript 50
4.2 Dojo源代码组织 52
4.2.1 Dojo模块的分类 53
4.2.2 Dijit模块 54
4.2.3 取得源代码 54
4.3 载入Dojo 55
4.3.1 运行时配置 55
4.3.2 dojo.require 57
第5章 JavaScript语言的扩展 58
5.1 利用dojo.hitch实现绑定 58
5.1.1 绑定上下文 58
5.1.2 绑定参数 61
5.2 JavaScript 1.6的数组方法 63
5.3 支持多态 66
5.4 组合、结构化与复制对象 68
5.4.1 混合对象 68
5.4.2 复制对象 69
5.4.3 复制类似数组的对象 70
第6章 异步编程 71
6.1 利用Dojo进行DOM事件编程 71
6.1.1 编写事件处理函数 72
6.1.2 处理函数签名 72
6.1.3 键盘事件对象 74
6.1.4 事件传播 75
6.1.5 默认处理 76
6.1.6 关联处理函数 77
6.1.7 利用dojo.addOnLoad执行初始化代码 79
6.1.8 DOM事件分类 83
6.2 利用Dojo关联用户自定义事件 83
6.2.1 截获JavaScript函数 83
6.2.2 关联用户定义事件 84
6.3 发布-订阅 86
6.4 利用dojo.Deferred管理回调函数 87
6.4.1 示例:构建一个高性能显示引擎 88
6.4.2 实现进程控制 90
6.4.3 利用dojo.Deferred注册回调函数 91
6.4.4 错误处理 93
6.4.5 声明回调函数和错误处理函数 94
6.4.6 取消回调函数处理 96
第7章 DOM工具 100
7.1 核心Dojo DOM工具函数 100
7.2 查找和编辑节点 104
7.2.1 dojo.query 105
7.2.2 dojo.query选择器 107
7.2.3 dojo.NodeList能做什么 111
7.3 插入、移动和删除的DOM节点 113
7.3.1 操纵DOM树示例 114
7.3.2 使用dojo.place来移动节点 115
7.4 定位DOM节点 116
7.4.1 用CSS和Dojo定位 116
7.4.2 动态定位节点 119
7.5 动画 121
7.5.1 DHTML动画基础 121
7.5.2 使用dojo.animateProperty来实现动画 122
7.5.3 使用dojo.anim来实现动画 126
7.5.4 为问题列表挑战添加动画效果 126
第8章 基于XHR、script和iframe编写远程脚本 130
8.1 原生远程脚本 130
8.2 使用Dojo的XHR框架 131
8.2.1 调用dojo.xhr 132
8.2.2 args、ioArgs以及处理函数 133
8.2.3 内容处理方式 138
8.2.4 控制HTTP事务 142
8.2.5 使用表单 144
8.2.6 POST以及其他的HTTP方法 145
8.2.7 Dojo XHR的其他知识点 146
8.3 使用script实现远程脚本 146
8.3.1 探测动态加载的脚本 147
8.3.2 Dojo对于动态Script元素的支持 149
8.4 基于iframe编写远程脚本 152
8.4.1 Dojo对于使用iframe的脚本的支持 152
8.4.2 iframe的工具函数 154
8.5 使用远程脚本访问Web服务 155
8.5.1 明确定义远程过程调用 155
8.5.2 使用dojo.rpc执行远程过程调用 156
8.5.3 在Yahoo中使用Dojo RPC 159
8.6 书签和不带导航的后退按钮 161
8.6.1 简单的单页Web应用 161
8.6.2 使用dojo.back导航单页Web应用 163
第9章 使用dojo.declare定义类 166
9.1 为什么在JavaScript中使用面向对象编程 166
9.2 定义简单的类 167
9.2.1 原型以及原型的继承 167
9.2.2 Shape类的类继承 168
9.2.3 使用dojo.declare定义一个简单的类 169
9.2.4 dojo.declare创建的对象 170
9.2.5 标准的使用模式 172
9.3 使用单继承定义子类 172
9.3.1 Circle对象空间 174
9.3.2 调用父类中的方法 175
9.3.3 手工添加父类方法 176
9.4 聚合和多继承 177
9.4.1 使用聚合派生新类 178
9.4.2 各个实例的初始化 180
9.4.3 使用聚合类进行类型测试 182
9.5 预处理构造函数参数 184
9.5.1 处理构造函数参数的方法 185
9.5.2 使用散列来指定参数 186
9.6 解决属性名称冲突的问题 187
9.7 两阶段构造 189
9.8 不使用构造函数创建自定义对象 191
第10章 dojo.data 193
10.1 鸟瞰 193
10.1.1 捆绑的驱动类 194
10.1.2 数据存储器不是数据库 194
10.1.3 特性 197
10.1.4 使用dojo.data.ItemFileReadStore的例子 198
10.2 dojo.data和增量搜索 199
10.2.1 建立一个数据存储器对象 199
10.2.2 拉取提示数据 200
10.2.3 自动完成 201
10.2.4 查询 201
10.3 使用QueryReadStore进行作业划分 202
10.3.1 为什么你可能需要作业划分 202
10.3.2 将dojo.data的请求翻译为URL 203
10.4 从JavaScript调用读取方法 204
10.4.1 fetch方法和分页 204
10.4.2 排序 205
10.4.3 fetch的处理函数 205
10.4.4 更多的读取方法 206
10.5 Yahoo搜索驱动 207
第11章 Dojo加载器和构建系统 213
11.1 概述 213
11.1.1 加载器和构建系统协同工作 213
11.1.2 跨域加载器 214
11.2 Dojo加载器 216
11.2.1 dojo.require 216
11.2.2 模块路径 216
11.2.3 设置模块路径 217
11.2.4 使用模块路径控制版本发布 218
11.2.5 dojo.provide 219
11.2.6 模块模式 219
11.2.7 为跨域加载器编程 220
11.3 使用Dojo构建系统优化部署 222
11.3.1 使用build打包Release程序 223
11.3.2 Acmecorp的Magi-Browse 223
11.3.3 步骤1:全部按照默认设置 224
11.3.4 步骤2:打包 227
11.3.5 步骤3:层打包 230
11.3.6 步骤4:使用跨域加载器 231
11.3.7 步骤5:压缩 233
11.4 使用Dojo-Rhino压缩JavaScript资源 233
第三部分 高级Dijit 238
第12章 编写小部件脚本 238
12.1 到底什么是小部件 238
12.1.1 声明式小部件 239
12.1.2 编程式小部件 240
12.2 查找并操作声明式小部件 240
12.3 编程式地创建实例 243
12.4 扩展点 247
12.5 实例:实时表单 252
第13章 树 255
13.1 简单树结构 255
13.2 带有层次结构的数据存储器 257
13.2.1 ItemFileReadStore和树 257
13.2.2 JavaScript中访问复杂数据 259
13.3 扩展点 261
13.3.1 盒子树 261
13.3.2 onClick扩展点 262
13.4 操作树结构 262
13.4.1 添加、删除、修改树节点 263
13.4.2 把树结构保存到服务器 264
13.5 拖放 266
13.5.1 一个小的重构 267
13.5.2 _TreeNodes和关联对象 269
13.5.3 检查施放操作 270
13.5.4 施放和添加元素 272
第14章 网格 275
14.1 网格显示和设计 275
14.1.1 子行 277
14.1.2 视图 278
14.2 编程式地创建结构 279
14.2.1 JavaScript中网格结构的定义 279
14.2.2 行选择条 281
14.3 扩展点 282
14.3.1 单元格层次扩展点 282
14.3.2 聚合函数和onBeforRow扩展点 283
14.3.3 行选择 287
14.3.4 鼠标和键盘事件 288
14.4 单元格编辑 289
14.4.1 使用单元格编辑器 290
14.4.2 单元格格式化:formatter扩展点 291
14.4.3 数据同步 292
14.5 网格操作 292
14.5.1 排序 292
14.5.2 过滤 293
第15章 表单控件 296
15.1 表单控件的特性 296
15.1.1 Dijit表单控件和与之相对应的HTML代码 296
15.1.2 通用方法 297
15.1.3 提交表单 297
15.2 流水线编辑 298
15.2.1 对话框和工具提示对话框 298
15.2.2 内联编辑器 301
15.2.3 文本编辑 301
15.3 反馈 304
15.3.1 工具提示 305
15.3.2 进度 306
15.3.3 使用Toaster进行通知 307
15.4 日期、数值与国际化 308
15.4.1 标准格式 309
15.4.2 约束与格式化 309
15.4.3 取消标准形式 312
15.4.4 反馈 314
15.5 动作按钮、工具栏和菜单 314
15.6 ally 317
15.6.1 Tab顺序 318
15.6.2 获取扩展点的角色和状态 318
第16章 Dijit主题、设计与布局 321
16.1 主题结构 321
16.1.1 制作主题所需的文件 322
16.1.2 样式命名空间 323
16.1.3 样式继承 324
16.1.4 针对不同的浏览器的特定的样式定义 325
16.2 改变网页的视觉效果 326
16.2.1 单个HTML元素 327
16.2.2 元素类 327
16.2.3 主题段 328
16.2.4 从零开始制作主题 328
16.2.5 动态修改 329
16.3 无障碍和主题 330
16.4 面板:ContentPane和TitlePane 331
16.5 停靠容器:BorderContainer 335
16.6 栈容器 337
第17章 创建和扩展小部件类 341
17.1 使用dijit.Declaration定义小部件类 341
17.2 通过dojo.declare定义小部件类 346
17.3 小部件生命周期 349
17.3.1 dojo.parser和小部件 350
17.3.2 属性图 350
17.3.3 呈现小部件 351
17.4 扩展小部件 352
17.5 示例:一个Yahoo问答小部件 352
第四部分 富因特网应用程序 358
第18章 创建富因特网应用程序 358
18.1 概述 359
18.1.1 浏览器是一个UI平台 359
18.1.2 浏览器应用框架 359
18.1.3 工作空间对象简介 360
18.1.4 命令系统 361
18.1.5 状态栏 362
18.1.6 可以按需载入数据的数据存储器 363
18.1.7 模拟服务 363
18.1.8 浏览器应用程序 363
18.2 第1步:创建应用程序骨架 363
18.2.1 组织结构 364
18.2.2 创建主程序 365
18.3 第2步:主菜单和命令系统 368
18.3.1 命令元素存储器 368
18.3.2 主菜单 371
18.4 第3步:可定制的状态栏小部件 375
第19章 向RIA中添加动态内容 379
19.1 第4步:导航器面板及随需而变的数据存储 379
19.1.1 按需检索树数据 379
19.1.2 实现一个延时树数据驱动 381
19.1.3 实现模拟服务 383
19.1.4 连接各个部分 385
19.2 第5步:工作区对象 387
19.2.1 实现WSO小部件 388
19.2.2 实现静态文本小部件 392
19.2.3 将WSO连接到框架中 395
第20章 继续学习 399
20.1 基础库 399
20.2 图形 400
20.3 Dojo Data和存储器 401
参考书目 402