Dojo 体系架构总体上来看是一个分层的体系架构。最下面的一层是包系统,Dojo API 的结构与 Java 很类似,它把所有的 API 分成不同的包(package),当您要使用某个 API 时,只需导入这个 API 所在的包。
包系统上面一层是语言库,这个语言库里包含一些语言工具 API,类似于 Java 的 util 包。再上一层是环境相关包,这个包的功能是处理跨浏览器的问题。
Dojo 体系架构图 Dojo 大部分代码都位于应用程序支持库,由于太小限制,图中没有列出所有的包。
开发人员大部分时候都在调用这个层中的 API,比如,用 IO 包可以进行Ajax 调用。
最上面的一层是 Dojo 的 Widget 系统,Widget 指的是用户界面中的一个元素,比如按钮、进度条和树等。
Dojo 的 Widget 基于 MVC 结构。它的视图作为一个 Template(模板)来进行存放,在 Template 中放置着 HTML 和 CSS 片段,而控制器来对该 Template 中的元素进行操作。
Widget 不仅支持自定义的样式表,并且能够对内部元素的事件进行处理。用户在页面中只需要加入简单的标签就可以使用。
在这一层中,存在数百个功能强大的 Widget 方便用户使用,包括表格、树、菜单等。
常用包介绍 Dojo 1.1.1 提供了上百个包,这些包分别放入三个一级命名空间:Dojo,Dijit和 DojoX 。
其中 Dojo 是核心功能包 , Dijit 中存放的是 Dojo 所有的Widget 组件,而 DojoX 则是一些扩展或试验功能,DojoX 中的试验功能在成熟之后有可能在后续版本中移入到 Dojo 或 Dijit 命名空间中。
由于 Dojo 包种类繁多,下面只列举了最常用的一些包及其功能,以方便读者有个初步了解或供以后查阅。
[table=98%]
[tr][td=113][align=right][align=left]包名[/align][/align][/td][td=450][align=right][align=center]功能[/align][/align][/td][/tr]
[tr][td=113] dojo.io [/td][td=450] 不同的 IO 传输方式。 script、IFrame 等等; [/td][/tr]
[tr][td=113] dojo.dnd [/td][td=450] 拖放功能的辅助 API 。 [/td][/tr]
[tr][td=113] dojo.string [/td][td=450] 这个包可以对字符串进行如下的处理:修整、转换为大写、 [/td][/tr]
[tr][td=113] [/td][td=450] 编码、esacpe、填充(pad)等等; [/td][/tr]
[tr][td=113] dojo.date [/td][td=450] 解析日期格式的有效助手; [/td][/tr]
[tr][td=113] dojo.event [/td][td=450] 事件驱动的 API,支持 AOP 开发,以及主题 / 队列的功能; [/td][/tr]
[tr][td=113] dojo.back [/td][td=450] 用来撤销用户操作的栈管理器; [/td][/tr]
[tr][td=113] dojo.rpc [/td][td=450] 与后端服务(例如理解 JSON 语法的 Web 服务)进行通信; [/td][/tr]
[tr][td=113] dojo.colors [/td][td=450] 颜色工具包; [/td][/tr]
[tr][td=113] dojo.data [/td][td=450] Dojo 的统一数据访问接口,可以方便地读取 XML、JSON 等不同格式的数据文件; [/td][/tr]
[tr][td=113] dojo.fx [/td][td=450] 基本动画效果库; [/td][/tr]
[tr][td=113] dojo.regexp [/td][td=450] 正则表达式处理函数库; [/td][/tr]
[tr][td=113] dijit.forms [/td][td=450] 表单控件相关的 Widget 库; [/td][/tr]
[tr][td=113] dijit.layout [/td][td=450] 页面布局 Widget 库; [/td][/tr]
[tr][td=113] dijit.popup [/td][td=450] 这个包用于以弹出窗口方式使用 Widget ; [/td][/tr]
[tr][td=113] dojox.charting [/td][td=450] 用于在页面上画各种统计图表的工具包; [/td][/tr]
[tr][td=113] dojox.collections [/td][td=450]很有用的集合数据结构(List、Query、Set、Stack、Dictionary…); [/td][/tr]
[tr][td=113] dojox.encoding [/td][td=450] 实现加密功能的 API(Blowfish、MD5、Rijndael、SHA…); [/td][/tr]
[tr][td=113] dojox.math [/td][td=450] 数学函数(曲线、点、矩阵); [/td][/tr]
[tr][td=113] dojo.reflect [/td][td=450] 提供反射功能的函数库; [/td][/tr]
[tr][td=113] dojox.storage [/td][td=450] 将数据保存在本地存储中(例如,在浏览器中利用 Flash的本地存储来实现); [/td][/tr]
[tr][td=113][align=left][align=left]dojox.xml[/align][/align][/td][td=450][align=left][align=left]XML 解析工具包;[/align][/align][/td][/tr]
[/table]