都知道ajax的框架已经为数众多,真正了解点的大框架也只有ms的asp.net ajax (atlas)以及Jquery吧,其他的都是拿来就用。最近有想做个小应用,所以想换一个其他新框架来用。dojo去年就有下过0.3.1版本,但当时用的不太舒服(可能是还不了解),就放一边。这几天无意看到了dojo1.0这个月发布了,于是带着好奇去关注了下。真的很吃惊,这个框架发展真的太快了,变得出奇的强大,已经把许多框架远远抛在了后面,令人赞叹!!于是我就想深入下dojo。但究竟Dojo是怎么一个东西,我翻译了《the book of dojo》的introduce章节,也许可以回答一些这问题吧。另外,也希望大家可以关注mootool,我发现它也挺好,对我目前用不Dojo,所以我会选用它。但至于你选择哪一种框架,也许下文会对你的选择有所帮助,或许你也因此想有投身Dojo的冲动,至少我有点了。
最后,希望Dojo有更多的中文文档。。。
详细文档:http://dojotoolkit.org/book/dojo-book-0-9-0
Dojo1.0下载地址:http://dojotoolkit.org/downloads
CONTENTS
目录
介绍
Dojo
做得非常多,努力地使它在
3
个主要的层面上容易使用:
Dojo Core
、
Dijit
、和
DojoX
。这本书作为这三个层面的指导,介绍一些你需要的概念。使你在建立自己的组件、客户命名空间、单元测试这些高层次运用时,从手足难堪中解脱出来。
正如你所见,
Dijit
和DojoXJ建立在为所有Dojo应用程序提供支持Dojo Core的固定基础上。由于Core和Dijit被放入可靠的API及强大品质保证(QA)、国际化(i18n),容易处理许多网页边缘化特征的能力,也是因此Dojo而为人们所知。它们也在更松散的、更有组织的DojoX项目中得到发展。我们在整本书中都会向你展示各个部分是如何建立在彼此之上,以及如何运用每一个提供的基础,优雅地去解决直到现在用基于浏览器UI也难以对付的用户体验问题。
感谢你能看Dojo和《the Dojo Book》一书。如果在这本书中你没有弄明白,就在该书的网页中评论,留下你的问题。我们会努力地去改善。正是由于你的运用,激励了我们建立了Dojo。正是大家不断提升toolkit的用户体验的许多事,使我们一直坚持。正是在你们的帮助下,我们写下了这本书。
■
许可授权
你可以在商业软件中使用Dojo。这不需要去单独获取许可证或承担其他的责任。
Dojo Toolkit
是双重许可。优先许可协议是
Academic Free License v2.1
(
http://trac.dojotoolkit.org/browser/dojo/trunk/LICENSE#L43
)。它是非常开放的,允许被做商业用途,也为次级许可授权提供支持。
Dojo
基金会的所有项目的代码都在这个许可条款下发行。因为
AFL
极其自由,因而几乎没有必要都使用双重许可授权条款的两个部分。
由于用户要面临一些
由
FSF
所造成的问题。这些问题有关于
AFL
和
(L)GPL
的兼容性,模糊不清且由人为。因此,
Toolkit
也许会交替使用
BSD
许可证。但是,
AFL
和
BSD
许可证都符合
Dojo
基金许可授权目标。
Dojo
的双重许可授权和许多开源项目的不同。两个条款都是开放源码和非常自由,没有特权和麻烦的商业用途条款。在任何时候,你都不需要选择
AFL
外其他东西。一般情况下,你也不需要另外做什么来表明你选择了一个许可证。如果你还有什么有关
Dojo
许可授权的问题,请不要犹豫,立即同目前
Dojo
基金会的主席
Alex Russell
联系吧。
Dojo
基金会的角色
Dojo
是一个开元源软件,由非赢利性基金会发布。这个基金会是作为中立的知识产权所有者而设立。为了向基金会的项目用户明确,关于基金会的代码不存在任何模棱两可或者隐藏的责任,所有的贡献者都被要求在贡献者许可同意书上的签名。
基金会的事务都要由
Dojo
基金会的所有委员投票决定。基金会由贡献者以透明的方式运作,并且只是依靠捐赠筹集资金。
第三方许可证
Dojo
使用了其他开源项目的代码,因此也要服从他们的许可条款。这些许可证和软件版权公告列表如下:
- Firebug Lite (Dojo Base): BSD License
- Common Locale Data Repository,CLDR (Dojo Base): Unicode License
- dojo.css (Dojo Base): BSD License
- AES Encryption Algorithm (DojoX sql): BSD License
- MD5 and SHA1 Encruption Algorithms (DojoX Cryptography): BSD License
- Dojo Offline Editor Server Demo (DojoX Offline): Apache License
- CLDR (Dojo Utilities): Apache and Mozilla Public Licenses
- Packer (Dojo Utilities): MIT License
- DOH Sounds (Dojo Utilities): Copyright Original Authors
- ShrinkSafe,Rhino Interpreter (Dojo Utilities): Mozilla Public License 1.1
■
历史
早在
2004
年之前,
Alex Russell(netWindows
的创始人
)
就开始有意聘用
DHTML
项目
Informatica
的合作者。在这个过程中,许多
DHTML
社区的成员之间不断接触,以一封
2004
年
4
月
25
日标题为
“出售
DHTML
的未来”的邮件达到了顶点。
David Schontzler (Stilleye)
在
Informatica
上花费了一个暑期的工作。
Dylan Schiemann
也在那时加入。就这样,在
Informatica
项目的帮助下,
Alex
和
Dylan
写下了
Dojo
的第一行代码。还有其他许多社区成员也活跃参与
Dojo
方面的设计。他们是
Joyce Park
、
Tom Trenka
、
Mark Anderson
、
Leonard Lin (
是他建议取名
Dojo)
、
Aaron Boodman,Simon Willison
、
Cal Henderson
以及
Dan Pupius
。
在许可授权、选择名字、代码规范、开发工具、服务器配置及需求上,我们和
ng-dhtml(
现在
Dojo
的开发者
)
用一系列邮件讨论了几个月。这之后,便开始了工作,并成立了
Dojo
基金会。这个基金会是一个
501(c)6
(美国的一个联邦法案条款)实体,这个条款用来管理代码权和知识产权
(IP)
,今天也管着一些其他项目。在
2005
年
3
月,来自的社区的贡献开始重于核心开发团队。今天,
Dojo 0.4.x
的
5
个主要发布版本已经有了超过
300,000
次的下载,有超过
60
个开发者的贡献和代码。以及有一些像
IBM
、
AOL
、
Sun
、
SitePen
、
Bloglines
等等这些大用户,也不断地使
Dojo
质量得到提高、社区变得活跃。
■
为什么要选择Dojo?
今天已经有几个高质量的
JavaScript
工具包,以及其他几百种质量与完整性不断改变的工具包。但为什么在如此多的选择中,你就要选择
Dojo
呢?
- 宽度和深度: Dojo是一个“full stack”(意指集成了全部所需功能的框架)。与将几个来自不同源码的组件揉合在一起不同,Dojo是在可信赖的一套高质量大厦的基础上,用整合的公共基础和多种可选的模块去使用组件。这些组件提供了非常好的用户体验问题的解决方案,能够很容易地被放入你的需要。从平板层到客户图表和图象,从数据绑定到时间测试模块系统,Dojo都是实现强大体验的坚固基础。
- 质量: 国际化和易用性基础,贯穿在整个Dojo的结构中。按键事件能正确地响应。所有的组件拼装成一个粘接力的整体。每一件事用CSS定制很轻松。可是,只要做很少的事,就可以在所有的地方都有非常好看的UI。
- 表现: Dojo每天都被用在高收益、高流量的网站上,使用Dojo的构建工具是主要原因。Dojo的包系统,让管理大型UI项目开发、系统顶层建设更加的容易,使你的项目更出色。
- 社区: Dojo是个开放社区。因此,许许多多的个人和公司一起加入进来,开发了大家得益的工具。工具的许可授权也尽量做得非政治。如果你正在打算涉及这些,我们也努力使满足你的渴望变得容易。所有的开发都是在开源环境中进行,参与近来的障碍也特意放得非常低。我们不在意你在哪工作或者你多有资格,我只关心你很想构件更好用户体验的产品。设计者、开发者或文档编写人员,Dojo社区尊重每一种贡献,你在社区中的地位只等于你所做工作,而不是政治口角。我们正做工作改变关于那些人可以参与贡献开源组织的概念,我们邀请你参与我们一起绘描绘新的路径。如果你想要构建一个强大的产品以及觉得自己可以帮助我们,那么希望你告诉我们。
Dojo
与其他的工具包的比较
- MochiKit:MochiKit是一个高质量的JavaScript工具包,它使得写Javacript代码更出神入化并且达到出色的表现效果。它和Dojo一样,采用了许多旧的打包、命名、全局名字空间的惯例。主要由Bob Ippolito所写。它有大量的文档和测试。但是不像Dojo,它没有一个小组件系统(widget system)和可扩展的组件套。一些代码被Mochi和Dojo共享(当然,在CLA许可协议下)。Mochi没有被一个基金会所援助,代码门第也未得证明,但是它被很自由地许可。
- Prototype+Scriptaculous: 这二者是个普遍使用的库,提供了许多和Dojo Core同样的功能。但是,在关于全局命名空间、常使用方法简命名偏好,及其它所关心的方面上,它们和Dojo保持了不同的原理。这两个库主要有良好的文档和广泛的社区支持,还可以与Ruby On Rails(以及其他框架中)紧凑的整合在一起。Scriptaculous提供了一些控件,比如自动完成输入框(auto-complete)、滑动条(sliders)等,但都不是组件工具包,也没有为轻松构件组件提供支持。虽然许多第三方扩展(add-on)库可以用在Prototype+Scriptaculous上,可是同样没有和库一起发布,也没有具有特色的包和构建系统。Prototype和Scriptaculous Mochi没有被一个基金会所援助,代码门第也未得证明,但是它们非常自由的被使用。
- YUI: YUI是由Yahoo内部开发,以可扩展性、高质量的文档和示例为特色。目的是为实现快速,锁定专业PHP开发者设计。其实说实话,YUI主要是为满足Yahoo规模的应用程序的需要而设计的。工具包中的可用控件日渐变多,都使用了好用的标准化布局样式表CSS。YUI没有使用包系统,但是分发了” 向上滚动(roll up)”常用功能文件,并用文档清楚告诉用什么顺序装载。不能用CSS查询、标记驱动组件(markup-driven widget)。YUI有活跃的社区和大方的许可授权,但是外部的贡献者并不被允许进入这个项目,Yohoo也没有澄清代码的血统和其他工具包的知识产权(IP)。YUI没从源头控制任何的数据访问。在Yahoo CDN上使用的YUI都被边缘缓存(edge-cached)。
- JQuery:一个最初关注于操纵现在DOM结构的小型系统。它以混合Xpath/CSS查询语言(Dojo使用的是标准的CSS3.0查询)为特色,为查询结果提供了一套丰富的选择和操作。Jquery将Ajax、效果和其他一些运用装入一个核心(除了Mootools,胜过其他所有的)然而Jquery中没有足见和包系统,可以使用在Jquery上建立的第三方组件库。Jquery社区高度活跃,常常也很有帮助,外部的贡献和补丁也被接受。Jqurey由MIT与GPL双重许可,John Resig具有所有版权。但是并不清楚在什么条款下,其他贡献者如何把知识产权(IP)分给了John。有几个框架(特别是Drupal)已将Jquery整合了进去。
- EXT:有点类似Dojo的Dijit系统,EXT是一个组件库。它以数量庞大的一致且好看的小组件(widget)为特色,这些组件实现了跨浏览器的纯像素布局和仿桌面UI。最初EXT是为在YUI和后来的Jquery上运行而设计。如今,它有自己的低层库,不需要依赖第三方。EXT社区非常活跃,具有良好的库文档。依据LGPL许可授权,有多种形式的商业许可证。但是,外部的贡献者是否被认可(在哪些条款下),以及在某些方面,无名子版本的访问受不受那些项目资金提供者的限制,都还不清楚。
- GWT:GWT注意到JavaScript应是个要被解决的bug,应运用高级编译器技术让开发者在Java中编写,并生成以JavaScript为基础的动态Google风格的UI。因此,GWT直接整合了服务器端开发和客户端开发。默认的小组件(widget)系列完全是Dijit所提供的子系列,但是要充分地运用所有的代码生成却相当辛苦。不断增大的第三方扩展库很宝贵,可为默认组件做了不少提升。不像YUI和EXT,GWT是以一个开源项目进行的,允许来自外部的贡献者(committer)。在开源环境下进行开发,然而这也使得在管理知识产权(IP)的问题上用了很复杂方式(CLA、代码检查,许多地方很像Apache和Dojo)。GWT应用程序只能用Java来写,并且很多是要依赖于Java的容器。良好的文档和不断成长的社区提供了很有帮助。
为了比较
,Dojo
有
:
- 接受外部贡献者,并使用CLA许可协议(如同GWT和Apache)来保证没有知识产权的争论。
- 许可授权非常自由,为每个人都提供了匿名SVN访问。权利也得到了保证。
- 提供一个比较丰富的客户端组件套,但不要求和任何服务器端语言(“是协议,而不是API”)紧密绑定。
- 尽量在网线中传输大小和常用功能之间提供一种平衡。Dojo的基础库(Dojo Base)大小和Prototype接近。
- 非常注意使你的页面不会侵犯到其他代码,并且都保留了它们的全局命名空间。
- AOLs CDN上的所有使用都会可以被边际缓存(edge-cached)。
- 提供包系统,使你知道在假设的问题上以什顺序进行加载的。