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