Dojo的全称是Dojo Toolkit,始创于2004年,是当前各种蓬勃发展的JS工具包中的佼佼者。Dojo 为富互联网应用程序(RIA) 的开发提供了完整的端到端的解决方案,包括核心的 JavaScript 库,简单易用的小部件(Widget)系统和一个测试框架。
Dojo Toolkit 的特性可以分到 4 个不同部分。这种划分使得开发人员可以将库大小保持到最小,确保应用程序性能不受大量 JavaScript 库下载的影响。例如,如果您只需要 Ajax 支持性能,您只需要包含 base 包;不需要包含扩展的 Dijit UI 组件。
Base
Base 包提供 Dojo Toolkit 的基础,包括一些功能,比如 DOM 使用函数、CSS3 基于选择器的 DOM 查询、事件处理、基本的动画、以及 Dojo基于类的面向对象特性。本文主要介绍 Base。
Core
Core 包包含一些 Base 中没有包含的附加特性。通常,这些特性不像 Base 中的特性那样频繁使用;因此,它们单独加载减轻 Base 包的负担。从这一点上来讲,Core 包提供一些实际有用的组件,包括高级动画拖放、I/O、数据管理、国际化(i18n)、浏览器历史管理。
Dijit
Dijit 包包含 Dojo 小部件和组件的扩展 UI 库。这些小部件的一些示例包括对话框、日历、调色板、工具提示和树。它也包括一些表单控件,这比标准 HTML 表单控件提供更多的功能,还有一些完整的布局管理选项。
DojoX
Dojo eXtensions (DojoX) 包含工具箱的各个子项目。位于 DojoX 中的大多数是实验特性,但是也有一些稳定组件和特性。
1 dojo.require()方法
以类似C编程中#include或者Java中import的方式加载所需的部件。
例如: dojo.require("dojo.parser");
dojo.require("dijit.form.Button");
2 dojo.byId()方法
dojo.byId('Box')等价于document.getElementById('Box'),但dojo.byId能消除不同版本浏览器之间差别。
3 dojo.connect()方法
dojo.connect(obj,event,context,method,dontFix);
参数 |
类型 |
描 述 |
obj |
Object|null |
事件关联的对象。最常见的是DOM node,关联的事件会被委托到DOM事件管理器(除非dontFix为true);也可以是其他JavaScript Object;或者干脆就是null,这时就是默认为dojo.global (window)。 |
event |
String |
上面obj需要关联的事件的名称。比如DOM node的”onclick”之类的。 |
context |
Object|null |
前面两个参数讲的都是关联的“源”,这儿开始就是讲关联的“目标”了。context为后面的method提供了执行上下文环境,相当于method的this。如果context为null且method是一个function,则method会继承event的context。如果method是一个string,则context必须是method的源对象。如果context为null,则默认为dojo.global。 |
method |
String|Function |
当event被触发后调用的目标函数。可以是函数引用,或者context中的函数名称。此method会拿到和事件同样的参数。 |
dontFix |
Boolean |
可选项。如果obj参数是DOM node,当设置dontFix为true时,可以阻止关联被委托到DOM事件管理器。(貌似很强大的功能) |
语法 | 含义 |
示例 |
---|---|---|
* | 任何元素 | dojo.query("*") |
E | 标签为E的元素 | dojo.query("div") |
.C | 带有类C的元素 | dojo.query(".baz") |
E.C | 标签为E且带有类C的元素 | dojo.query("div.baz") |
#ID | ID值为ID的元素 | dojo.query("#quux") |
E#ID | 标签为E且ID值为ID的元素 | dojo.query("span#quux") |
[A] | 带有属性A的元素 | dojo.query("[foo]") |
E[A] | 标签为E且带有属性A的元素 | dojo.query("span[foo]") |
[A="V"] | 带有A属性且该属性的值为V的元素 | dojo.query("[foo='bar']") |
E[A~='V'] | 标签为E并且带有属性A,且该属性值为空格分隔的列表,同时其中一个值恰好等于V的元素 | dojo.query("span[foo~='bar']") |
E[A^='V'] | 标签为E并且有属性A,且该属性值以V开头的元素 | dojo.query("span[foo^='bar']") |
E[A$='V'] | 标签为E并且带有属性A,且该属性值以V结尾的元素 | dojo.query("span[foo$='bar']") |
E[A*='V'] | 标签为E并带有属性A,且该属性值中包含子字符串V的元素 | dojo.query("span[foo*='bar']") |
E > F | 作为元素E子元素的F元素 | dojo.query("div > span") |
E F | 作为元素E后代元素的F元素 | dojo.query("E F") |