原文链接:http://dojotoolkit.org/book/dojo-1-2-release-notes

向后兼容

Dojo1.2中添加了一些新特性,也修改和废弃了一些原有特性。不过,最重要的是,Dojo1.2的主体仍然保持与Dojo1.0Dojo1.2向后兼容。对此,“迁移问题”中会详细介绍。

Core及相关的库

键盘事件

为防止将可打印字符键错误地识别为功能键(例如,在IE中,左括号与向下箭头键的keyCode相同),新增了charOrCode属性,不推荐使用keyChar

浏览器检测

消除了dojo.isIEdojo.isFFdojo.isSafari等属性“错误的”返回值。在用户代理不是指定浏览器的情况下,这些属性现在的返回值是undefined而不再是0,但在条件正确的情况仍然会返回版本号。

dojo.cldr

dojo.cldr已经从CLDR1.5.1更新为1.6。由于地区表已经更新,因此格式化字符串或使用dojo.date.localedojo.numberdojo.currency等包解析的用户字符串有可能与以前版本不一样。

djConfig.addOnLoad

通过dojo.addOnLoad添加了一个新回调函数。

djConfig.isDebug=true的情况下,try/catch行为将发生变化

以前,当Core中某些模块(XHRDeferreddojo.addOnLoad回调代码)发生的错误被捕获后,要么通过控制台进行报告,要么另行抛出,导致难以追踪错误的起因。虽然这样有利于代码稳定,但从开发角度看,却不利于发现错误。现在,相关模块会让最初的异常向上冒泡,并在djConfig.isDebug设置为true的情况下停止JavaScript的执行。如果diConfig.isDebug被设置为false(或undefined),则使用try/catch结构并通过控制台记录错误。

dojo.fx.easing

以前的dojo.fx.easing已经被提升到Core中,并可以通过dojo.require(“dojo.fx.easing”)加载。

dojo.html.set()

新增特性,用于在ContentPane外部使用类似ContentPane的功能。

Dijit方面的增强

易用性及观感的增强

Dojo1.2中,Dijit的外观和易用性获得了较大增强。

_Widget.attributeMap

现在,attributeMap也可以处理innerHTML和类名了。可以把attributeMap的作用想象成绑定部件属性与DOM节点。

_Widget.placeAt

placeAt()是一个新的domNode操作方法,用于简化对部件的domNode的连缀和放置操作(或通过addChild()将部件的domNode添加到其他部件中)。

动画

加快了部件中默认的动画执行时间。现在,可以通过dojo.config.defaultDuration控制动画了。

BorderContainer

修正了窗格布局中缺失边框或出现双边框的问题。通过新的参数gutters=true/false(默认为true)可以为所有窗格添加“外边距”(包括不可调整大小的窗格),从而使窗格与窗格、窗格与BorderContainer之间保持一定距离。

Button

修正了垂直对齐及各种显示问题。

CheckBox

突出显示搜索结果。

FilteringSelect

不必为了让用户能清除下拉列表中的值而放入空值了,用户现在可以使用退格或删除键清除该值。

突出显示搜索结果。

表单验证

增强后的表单部件不会再因为用户输入的值不完整而变黄了。但是,如果用户输入的值无效(哪怕再继续输入更多字符也仍然无效),仍然会变黄……这样用户就不会再感到它们“慌报军情”了。

另外,还为dijit.form.Form部件新增了onValidStateChange连接点,以便能够创建像禁用提交按钮(在表单无效时)之类的行为。

Menu

新增了CheckableMenuItem类。使用这个类,用户在选择菜单项时会伴随一个对勾图标出现或消息(有点类似切换按钮)。

RadioButton

FFSafari中实现了类似IE中的获取焦点的效果(标签四周会出现带阴影的线框)。

Tree

解决了水平滚动的问题,而且为每一行都设置了white-space:nowrap,确保标签不会折行显示。

同时还修正了图标与文本垂直的对齐问题。

TimeTextBox

自动滚动

键盘支持

更佳的外观

Tooltip

缩小了箭头图标

Util

util/buildscripts

通过一个新的构建选项可以去掉构建过程中所有JavaScript文件内包含的console.*调用。

stripConsole=normal将去掉除console.warnconsole.error之外的所有console.*调用

stripConsole=all将去掉所有console.*调用

警告:如果在使用这个选项时导致了OutOfMemoryError,请参考http://trac.dojotoolkit.org/ticket/7698

DOH:单元测试框架

新增了一个doh.robot包,以方便为DnD和部件等视觉组件编写单元测试。

dijit/tests/form/robot中也可以找到一些类似的测试。

迁移问题

在从Dojo1.1迁移到Dojo1.2时,需要对已有应用程序作如下更新:

下载文件或执行JavaScript的链接(dojo.addOnUnload()dojo.addOnWindowUnload()

通过dojo.addOnUnload()注册的回调函数以前不能在IE中被触发。现在这个问题虽然已经修正,但是也出现了一个问题。用户在单击下载文件或执行JavaScript代码(即href属性值为javascript:开头)的链接时,会触发window.onbeforeunload事件,而该事件又会触发dojo.addOnUnload回调函数。但是,上述链接通常不会影响页面。因此,如果要在dojo.addOnUnload()中执行破坏性操作,请务必格外小心。

如果需要清理循环引用以避免内存泄漏(除了有用的Dojo代码外),那么可以使用Dojo1.2中新增的dojo.addOnWindowUnload方法,该方法基于window.onunload触发回调函数。dojo.addOnWindowUnloaddojo.addOnUnload的原理相同,但只基于window.onunload事件发生(即页面真正缷载)而触发。在dojo.addOnWindowUnload()回调函数中操作DOMJavaScript属性时要小心,因为页面的状态不一定可靠。

Editor

出于安全原因,不推荐使用TEXTAREA;而使用DIV

Widget.arrt()

Widget.arrt()是用于设置/取得所有部件属性的标准接口。旧方法setValue()setAttribute()setTitle()仍然存在,但已经不推荐使用。基本上,Widget.attr()dojo.attr()相似,详细内容请参考http://blog.dojotoolkit.org/2008/08/19/widget-attr

dijit._Widget.destroy()

_Widget.destroy()方法从技术上作了修改。以前,这个方法有一个“已定案的(finalize)”什么也不做的参数。但现在,这个参数被改为了“保护DOMpreserveDom)”,是一个布尔值,表示destory()是否删除与_Widget(this.domNode)关联的domNode。传入“true”,则保留DOM

dojo.isGears转移到dojo.gears.available

检测Gears的特性转移到了dojo.gears模块中。要检测Gears是否已经安装,首先执行dojo.require(“dojo.gears”),然后根据dojo.gears.available返回的布尔值确定。

在调用dojo.xhr时,不再推荐使用handleAs: “json-comment-filtered”

如果再使用handleAs: “json-comment-filtered”,会在控制台中看到一条警告消息。

要取消该警告,可以将djConfig.useCommentedJson设置为true

同时,这也意味着删除了djConfig.usePlainJson标签,因为普通的JSON是优先考虑的,目前使用普通的JSON不会产生警告。

dijit.layout.BorderContainer在所有窗格四周添加了外边距

新参数“gutters”的默认值为true,因此会在所有窗格周围添加“外边距”(即使是大小不可调整的窗格),从而使窗格与窗格、窗格与BorderContainer之间保持一定距离。

原文PDF:http://cn-cuckoo.com/tools/Dojo.The.Definitive.Guide.Foreword.pdf

修订文档:http://cn-cuckoo.com/tools/Dojo_TDG_foreword.pdf

初次修订后的译文如下:

实话实说,我是因为DHTML才中途退学的。

当时,经常是时钟已经指向了凌晨3点,我还在不停地搜索MSDN文档、W3C规范以及数以百计的comp.lang.javascript帖子,然后又将这些来源的信息综合起来,发表几十个“要是……会怎么样”的帖子。就好像是命中注定的一样,我对每个小小的发现都不轻易放过,除非浏览器能够听命于我,否则决不善罢甘休。那时候,一群志同道合的人在一个小社区中做着同样的事,大家争先恐后地将每个新发现、新技术或一些能够让Netscape正常运行的小技巧在DHTMLCentral论坛中共享出来。与早晨7点有关拉丁文动词变化的讨论和无休止的Java讲义相比,真正吸引我的还是发现闭包的妙处,或者最终完全理解基于原型的继承。就连整个圣诞节假期,我都沉迷于JavaScript的学习和研究当中。我知道女朋友和父母肯定非常担心我,可他们谁也没有让我分心。于是,在付出了中断学业的代价之后,我对开源(http://opensource.org)有了深刻的理解,也收获了持久的友谊,最终还创建了Dojo。

时过境迁,DHTML黑客的工作也发生了变化。我们掌握了如何让浏览器听命于自已大多数技巧,也知道浏览器之间在哪些地方有重叠之处。我们已经有能力利用它们了……看看Dijit和DojoX中模块的深度和多样性就能体会到这一点。当前,DHTML/Ajax黑客的工作是如何把有效的技术纳入到对用户和开发人员的服务当中,而且采取的方式也要比针对终端用户和准开发人员的方式更好。Dojo的故事其实就是这种技术转移的故事。一个架构,无论它本身有多好,如果不能有效地将它交付给用户,结果还是失败。同样,外表漂亮但却难以维护的图形及界面,也不可能得到开发人员的一致认同。如果设计人员/开发人员因此而难于协作,当然无益于我们愿望的达成。令人欣慰的是,Dojo开发团队正在和Web一起走向成熟,而随着Dojo1.0发布和本书的问世,我们现在终于可以自信地说,Dojo已经完全抵达了成功的彼岸。我们很久以前创立的路线图文档,终于在今天划上了完美的句号。今天,依赖于Dojo创造的完整用户体验,已经带来了每月数十亿的页面流量。而且,很多大型设计人员和开发人员团队,正在以这个工具箱为依托,齐心协力地创造更加美好的体验。

这些成绩的取得绝非一人之功,甚至都不是一个小团队所能企及的。在Dojo发展过程中曾经对它有过贡献(同时对它抱以坚定信心),并致力于共同创造一个更美好的Web的人实在太多了。我们从其他项目中借鉴了我们认为最好的思路和做法,结果是营造了一个高水平的竞技平台,而这个平台的规则无论是对用户、贡献者,还是对发起者都做到了一视同仁。Dojo以不争的事实再次向世人证明,开源项目不仅仅是封闭系统可以利用的一个方便的分发模型,其本质在于协作。只要推行用户认同的规则,并且在项目成员之间达成应有的默契,开源项目就能够发展兴盛。在这个工具箱所体现出的各种技术性成果中,我认为最值得自豪的是——我们以真正开放(包括今后可能参与进来的人)、公正的方式实现了它。事实上,这个项目在创建之初,我们就宣布要切实尊重任何形式的贡献,不能仅仅局限于代码。而且,这个项目也要改变开源软件的发展基调,例如它应该鼓励了面向大学和民间的对话。此外,它应该是一个依赖于社区构建的项目,因而不能把用户看成“他们”——事实上,“他们”即“我们”。鉴于本书明确地传达了这种Dojo工具箱赖以存在的、朴素的开放理念,因此我们衷心期待本书读者能够为Dojo将来的发展出谋划策。

在我和Matthew Russell面对面坐在一起的时候,本书差不多已经快要“出炉”了。开源项目好像就是那么有意思——虽然你和某人共事了好多年,但邮件列表和IRC中的那些只言片语,如果不是因为要谈论本地麦酒(或者,必要时的健力士黑啤)的流行和刺激性口味,恐怕永远都不会发现它们已经被落到了实处。直到Matthew和我在旧金山北滩的一家舒适的老式小酒馆中交换意见,我才回到现实:他对技术理解的深度、强烈的求知欲和针对不同读者层次展开讨论的能力,完全够得上一位好老师的标准。因为我是依次审读每一章的草稿,我发现随着审读的进行,自己会根据Matthew逐步展开的阐发陆续删除前面所写的批评意见。Matthew的阐发令Dojo更加平易近人、更加友好和善,也更加突显了其高效及强大。当读者在阅读本书并与Matthew神交之时,不断迸发的、明亮的思想火花所带来的会心一笑,恐怕就是本书最大的礼物了。

我像这样坚持与IRC消息及论坛文章的作者见面差不多已经有4年了。在开源项目中,你所接触的每个人几乎都表现为要解决的技术问题、要修复的bug,或者应该要考虑的什么特性。但是,唯有面对面接触才是了解合作者的最佳方式,而且几乎总能让你有意想不到的收获。每当此时,那些所谓的仁慈、无私、天才等等廉价的口号只能让人感到羞愧难当,特别是在一个人人有份的项目中提到个人牺牲的时候尤其如此。Matthew的这本书让我和我所尊重的优秀团队感到十分荣幸。

我并不想建议读者像我一样,为了追求某个理想(而且没人会为此付钱给你)就冒然中断自己的学业。但是,如果有一天你的头脑中真的燃起了星星之火,千万不要忽视它。哪怕你因此结识那些妙不可言的人,只有我所结识的、现在已成为我朋友的人的一半,那么再多的不眠之夜也是值得的。

——Alex Russell
Dojo Tookit创始人,Dojo基金会主席