web2.0时代,ajax技术成为整个前端开发领域的基石。大部分的书籍、博客由此切入来介绍前端类库与框架,所以dojo往往只被当做一个ajax类库来介绍,然而仅仅以此来定位dojo,无异于管中窥豹。对于dojo来讲,关于ajax的封装只是dojo框架中的一小部分,dojo的定位是一个从前往后一手包办的企业级开发框架。
目前在模块化开发盛行的前端开发中,requireJs无疑是最受推崇的一位。只是很少有人知道requireJs出自dojo框架,dojo加载器的开发者就是requireJs的作者。曾经有一位使用dojo多年的哥们出去面试,面试官问他,是否熟悉模块化开发。哥们很诧异的问道:难道你们以前不用模块化吗?在dojo中模块化开发的理念是与生俱来的,我们的教程的第一部分,让大家最先接触的就是模块化开发理念与AMD规范,内容安排如下:
- 前端模块化开发理念与AMD规范介绍
- 自己动手实现一个AMD加载器
- dojo中对AMD的支持(dojoConfig)
在模块化的基础上,dojo整体分为三个部分:dojo、dijit、dojox。对应的源码分为三个文件夹,dojo文件夹下的是整个dojo框架的核心模块,而且这部分也可以单独拿出去作为一个独立的类库,性能可是不亚于jquery。dojo核心作为本系列的教程的第二部分,内容安排如下:
- 介绍几个重要又常用的工具类(lang、array、sniff与has)
- 介绍将JavaScript模拟成支持类声明的declare模块
- 介绍DOM操作模块,涉及dojo/dom、dojo/dom-*、dojo/domReady、dojo/ready、dojo/form、dojo/io-query
- DOM查询与NodeList介绍,涉及dojo/query、dojo/NodeList-*
- dojo中的切面编程与事件编程机制,涉及dojo/aspect、dojo/on、dojo/topic、dojo/Evented、dojo/touch
- Promise编程模型介绍与dojo对其的支持,涉及dojo/when、dojo/promise/*、dojo/Deferred
- dojo中Ajax部分的封装与架构设计,涉及dojo/request/*
- 动画的原理与dojo对动画部分的设计与封装,涉及dojo/fx、Animation、动画原理
- 国际化问题(i18n、date与number在不同地区的格式显示问题、rtl、bidi)
dijit部分是dojo框架提供的一系列UI组件,包含了布局控件、表单控件、tree、grid等。在本系列教程中dijit作为第三部分,但我们只介绍两个方面:
- 自定义dijit(涉及dijit/registry、dijit/_WidgetBase、dijit/_TemplatedMixin、dijit/_WidgetsInTemplateMixin、dojo/Stateful、dijit/Destroyable)
- dojo中的css framework以及自定义theme
dojox中是一些作为dojo和dijit部分的候选模块,里面有一些新功能与新控件,但是并没有像dojo与dijit那样得到dojo团队的全力支持。这一部分在2.0中将被选择性的添加到dojo或dijit,剩下的便废弃掉,所以对于这里面的内容我只提一下我在工作中遇到的几个模块即可。
如果你下载过dojo源码,一定会发现与dojo、dijit、dojox同级别目录下还有一个util目录。这个目录里面是dojo提供的打包、压缩工具,对这一部分的介绍放在第三部分——打包与测试中。
没有经过测试的产品是不能上线的,我们会介绍一个新的前端测试框架——intern。结合打包压缩,第三部分安排如下:
- 使用dojo打包应用程序
- intern的介绍与环境搭建
- 使用intern来编写单元测试
- 使用intern来编写自动化测试