1、1 dojo简介 Dojo是一个用JavaScript语言实现的开源DHTML工具包。它是在几个项目捐助基础上建立起来的(nWidgets, Burstlib, f(m)),这也是为什么叫它a unified toolkit的原因。Dojo的目标是解决开发DHTML应用程序遇到的那些、长期存在 、历史问题,以及DHTML 跨浏览器问题。 Dojo中包含有很多JavaScript编写的子package,负责处理当你在建造一个JavaScript应用时通常必须要自己来编写的基础(infrastructure)工作。它封装了跨浏览器的令人烦恼的代码,这样你就不必担心它们会来给你捣乱。它可以帮助你
2、更加容易地处理DOM。它在不同的浏览器中可以将XMLHttpRequest对象降级为使用其他的远程调用机制(译者注:例如,那些不支持XMLHttpRequest对象的浏览器),同时为你提供了最简单的和容易使用的API。 为了使大家获得一个关于这个框架的感性认识,我们来列出其中的package: • dojo.collections:很有用的集合数据结构(List、Query、Set、Stack、Dictionary...) • dojo.crypto:实现加密功能的API(Blowfish、MD5、Rijndael、SHA...) • dojo.date:无须编写丑陋的代码来解析日期格
3、式。 • dojo.dnd:拖放功能的辅助API。我们将要建造一个支持拖放功能的应用。 • dojo.event:事件驱动的API,支持AOP开发,以及主题/队列的功能。 • dojo.lfx:HTML和SVG效果库。我们将在例子中使用这些效果。 • dojo.animation:基于Dan Pupius在动画方面的工作 (http://pupius.co.uk/js/Toolkit.Drawing.js)的动画package(不再支持,应首 选dojo.lfx) • dojo.fx:不再支持,应首选dojo.lfx • dojo.io:不同的IO管道。cookie、IFram
4、e、发布/订阅功能等等。所有神奇的Ajax工作都 在这里完成。 • dojo.lang:对于整个JavaScript环境进行增强的功能。包括你所希望拥有的很多特征,例 如mixin、基于闭包(closure)的函数,以及大量的其他功能。 • dojo.logging:提供日志功能的框架 • dojo.math:数学函数(曲线、点、矩阵) • dojo.reflect:提供反射功能的函数库 • dojo.rpc:与后端服务(例如理解JSON语法的Web服务)进行通信 • dojo.storage:将数据保存在本地存储中(例如,在浏览器中利用Flash的本地存储来实现) • do
5、jo.string:现在你可以对字符串进行如下的处理,修整、转换为大写、编码、esacpe、填充(pad)等等。 • dojo.undo:用来撤销用户操作的栈管理器 • dojo.uri:处理URI的函数库 • dojo.widget:一个widget框架,允许你建造可重用的HTML/JavaScript widget,可以与简单的HTML标记共同使用(例如,
6、中使用dojo.dom。 • dojo.style:CSS功能,例如访问style的大小、与浏览器的盒模型配合工作,以及更多的功能。在开始编写一些基础的代码之前,最好先在框架中搜索一下这些功能,很可能别的某个人已经为你完成了这些功能!你很快会发现,如果你想要建造任何严肃的Ajax应用,Dojo能够为你提供大量的帮助。它可以帮助你从hack少量的onclick事件,升级到编写具有专业品质的JavaScript应用。 2 dojo的使用 2.1 选择正确的Dojo创建 当你下载Dojo的一个“版本”时(从http://download.dojotookit.org/下载zip文件,或者匿名
7、访问Dojo的SVN服务器http://svn.dojotoolkit.org/dojo/trunk/),你可以在下列选项中进行选择: • I/O(XHR)版本:如果所有你需要的仅仅是以Ajax的风格与服务器通信?那么请选择这个版本。 • Event+I/O版本:I/O版本加上事件系统。 • Ajax版本:在这个版本中你不仅得到了I/O和事件功能,而且还有killer级的可视效果。 • Widget版本:如果你爱好分离CSS、内容和JavaScript,那么你可以使用这个创建来开发下一级别(next level)的widget系统 • “Kitchen Sink”(水槽)版本:我不想
8、考虑这个版本。如果你确实想要下载这个框架的每一个比特并且使得你的用户接受你的选择,这个版本将会给你想要的东西。 2.2 动态加载package 对require方法的调用将会动态获取那些package所需的JavaScript代码,并且将它们加载进页面中。 2.3 定制的创建及应用 具体的应用使用。详见例子。 3 dojo的使用总结 3.1 dojo的优点: 一、背后强大的支持:IBM、Sun、BEA等,这是非常重要的优势。 二、功能的强大,Full Stack的框架,扩展了DHTML的能力,例如: 支持与浏览器Back/Forward按钮的集成。 三、Dojo Offline,一个跨平台的离线存储API。 四、Chart组件,可以方便地在浏览器端生成图表。 五、基于SVG/VML的矢量图形库。 六、Google Maps、Yahoo! Maps组件,方便开发M
10、ashup应用。 七、Comet支持,通过通用的Buyeux协议。 八、强大的UI(Dijit)。 九、面向对象的设计,统一的命名空间,包管理机制(The Package System and Custom Builds) 十、可扩展性。 3.2 dojo的缺点: 一、复杂,学习曲线陡。 二、文档的极端不全,这是一个很大的问题。 三、API很多不稳定,各版本间改动较大,现在还不是一个成熟的框架。 四、侵入性太大,页面中大量使用dojo的属性,例如