《JavaScript高级程序设计(第2版)》上市将近一个月了。这期间,为了制作勘误,我在重读这本书。与此同时,几位热心读者也将发现的一些错误迅速通过邮件发给了我,或者在出版社(图灵公司,http://www.turingbook.com)网站本书页面中提交了勘误。经过确认,目前有11处需要修改的地方(详见后面列出的查看勘误的页面)。

这些勘误信息主要来自@凌空一叶同学,特此致谢!

需要特别说明的是,图灵公司自今年以来,面向广大读者推出了“图灵5周年系列活动之‘有奖DEBUG’活动”。只要读者针对图灵公司新近出版的图书提交勘误,经过确认,每个错误向读者赠送价值5元的“购书码洋”,待累积到一定数额,就可以换取等值图书。此举旨在鼓励读者反馈勘误,提升图书质量。活动详情请参见:http://www.turingbook.com/Newswires/ShowNewswire-174.aspx

欢迎广大读者朋友踊跃迅速地反馈勘误信息,以便在后续印次及时更正,惠及更多读者。反馈勘误之前,请务必注意:

  1. 为了确保您的反馈得到积分奖励,请统一到图灵公司网站本书页面(附后)提交勘误;
  2. 请不要重复提交已经确认的勘误,在提交勘误前,请先查阅已经确认的勘误;
  3. 已经确认的勘误不再积分,未确认的勘误,只给先提交的读者计算积分。

提交勘误,请到如下页面:

查看勘误,请到如下页面:

在一年一度的新春佳节即将到来之际,应热心读者的要求,为满足大家先睹为快的愿望,也为了答谢朋友们对本博客长期以来的支持,即日起到春节前夕,本站将发布尚未出版的《JavaScript高级程序设计(第2版)》一书的样章(暂定为3章,约115页)。

申请办法

1、发邮件到:[email protected]
2、邮件主题:《JavaScript高级程序设计(第2版)》样章;邮件内容:您的Email地址。
3、24小时内收到样章,先睹为快!

备注:样章格式为PDF,托管在“Google文件”,可以在线查看(无须登录),也可以下载和打印。希望在线查看PDF的朋友,请在邮件正文中注明“希望接收Google文件”字样,即可收到样章的链接(也可以下载);否则,将收到PDF文件(*请确保有5M以上的空余邮箱空间)
样章列表(详细目录

第3章 基本概念
第4章 变量、作用域及内存问题
第5章 引用类型

《JavaScript高级程序设计(第2版)》简介

本书是人民邮电出版社图灵公司引进出版的大畅销书、JavaScript权威著作《JavaScript高级程序设计》的最新升级版。《JavaScript高级程序设计》自2006年11月出版以来,已经累计销售逾30000册,而且至今仍然十分畅销。这一点可以通过北京新华文化发展有限公司(新华书店)近期的店面销售数据看出来(大家可以自行比较一下其他畅销书的销量)。应该说,在Web 2.0革命爆发的同时,人民邮电出版社图灵公司引进出版的本书成就了计算机图书市场上难得一见的奇迹。

本书作者尼古拉斯·扎卡斯(Nicholas C. Zakas)现为Yahoo!公司首席前端工程师,世界顶级Web技术专家。原书第1版曾被选为Yahoo!公司YUI(Yahoo! User Interface Library,Yahoo!用户界面库)团队的内部培训教材。

2009年初,本书第2版面世(《Professional JavaScript for Web developers, 2nd Edition》)。新版本不仅篇幅由原来的600多页增加到800页,而且几乎全部更新、重写了上一版的内容,删除了上一版中与今天的职业需求无关的主题,新增了大量比上一版更有价值、更能反映JavaScript最新发展成果的内容。从颇具深度的JavaScript语言基础到作用域(链),从JavaScript引用类型到面向对象编程的最佳实践,从极其灵活的匿名函数到闭包的内部机制,从浏览器对象模型(BOM)到客户端检测,从文档对象模型(DOM)到基于事件的Web脚本编程,从错误处理到前端调试,从XML(E4X)到Ajax及JSON,从高级前端开发技术到前沿的客户端存储,从最佳编程实践到展望即将成为现实的API,直至JavaScript未来的发展。全书彻底涵盖了JavaScript技术的各个方面,几乎涉及到了Web前端开发的每一处细节。可以预见,这部著作一定会成为Web前端开发人员不可多得的又一部经典。

目前,《JavaScript高级程序设计(第2版)》的翻译工作已经进入后期阶段(全书22章,所剩不到5章)。而且,为确保新版及时上市与读者见面,出版社采取了与译者同步翻译、同步编辑审校的特别措施。新版本预计2010年上半年可以上市;当然,在确保出版品质的前提下一定会尽量往前赶!

样章详细目录

第3章 基本概念 1
3.1 语法 1
3.1.1 区分大小写 1
3.1.2 标识符 1
3.1.3 注释 2
3.1.4 语句 2
3.2 关键字和保留字 3
3.3 变量 4
3.4 数据类型 5
3.4.1 typeof操作符 5
3.4.2 Undefined类型 6
3.4.3 Null类型 7
3.4.4 Boolean类型 7
3.4.5 Number类型 8
3.4.6 String类型 14
3.4.7 Object类型 16
3.5 操作符 17
3.5.1 一元操作符 17
3.5.2 位操作符 20
3.5.3 布尔操作符 26
3.5.4 乘性操作符 29
3.5.5 加性操作符 30
3.5.6 关系操作符 32
3.5.7 相等操作符 34
3.5.8 条件操作符 35
3.5.9 赋值操作符 36
3.5.10 逗号操作符 36
3.6 语句 37
3.6.1 if语句 37
3.6.2 do-while语句 38
3.6.3 while语句 38
3.6.4 for语句 38
3.6.5 for-in语句 40
3.6.6 label语句 40
3.6.7 break和continue语句 41
3.6.8 with语句 42
3.6.9 switch语句 43
3.7 函数 45
3.7.1 理解参数 47
3.7.2 没有重载 48
3.8 小结 49

第4章 变量、作用域和内存问题 1
4.1 基本类型和引用类型的值 1
4.1.1 动态属性 2
4.1.2 复制变量值 3
4.1.3 传递参数 4
4.1.4 检测类型 6
4.2 执行环境及作用域 6
4.2.1 延长作用域链 9
4.2.2 没有块级作用域 10
4.2.3 声明变量 10
4.2.4 查询标识符 11
4.3 垃圾收集 12
4.3.1 标记清除 12
4.3.2 引用计数 13
4.3.3 性能问题 14
4.3.4 管理内存 15
4.4 小结 15

第5章 引用类型 1
5.1 Object类型 1
5.2 Array类型 3
5.2.1 转换方法 6
5.2.2 栈方法 7
5.2.3 队列方法 8
5.2.4 重排序方法 9
5.2.5 操作方法 11
5.3 Date类型 12
5.3.1 继承的方法 14
5.3.2 日期格式化方法 15
5.3.3 日期/时间组件方法 15
5.4 RegExp类型 17
5.4.1 RegExp实例属性 19
5.4.2 RegExp实例方法 19
5.4.3 RegExp构造函数属性 21
5.4.4 模式的局限性 23
5.5 Function类型 23
5.5.1 没有重载(深入理解) 25
5.5.2 函数声明与函数表达式 25
5.5.3 作为值的函数 26
5.5.4 函数内部属性 27
5.5.5 函数属性和方法 29
5.6 基本包装类型 31
5.6.1 Boolean类型 32
5.6.2 Number类型 33
5.6.3 String类型 35
5.7 内置对象 42
5.7.1 Global对象 43
5.7.2 Math对象 46
5.8 小结 49

注:最近,陆续收到读者来信,询问《jQuery基础教程》目前是第几次印刷。今在此一并回复:目前市面上销售的《jQuery基础教程》均为第4次印刷。为方便第1次印刷的读者,下面将第3次印刷时添加的“译者附注”公布于下,希望能对读者朋友有所帮助。

第3次印刷译者附注

本书自出版以来,受到了广大读者的热烈欢迎。本次印刷对第1次印刷中发现的错误和不妥之处进行了修订。同时,针对读者反馈中比较有代表性的问题,特作如下说明。

1. jQuery版本变化对本书的影响

本书英文原版在写作时,jQuery的最新版本是1.1。到了中文版出版时,jQuery 1.2已经发布了。由于新版本中的一些特性发生了变化,导致本书少量内容与新版本不一致,而且个别示例在新版本下不能运行。其中,主要是jQuery 1.2取消了对XPath选择符的支持(原因是XPath选择符可能会导致性能问题)。为确保使用新版本jQuery的读者能正常运行本书相关示例,现给出两种解决方案:第一种是继续使用XPath选择符,但必须下载Basic XPath插件,下载地址是http://plugins.jquery.com/project/xpath。插件实际上也是一段jQuery脚本,使用时把它贴到你自己编写的jQuery代码前面即可。这样,你的jQuery代码就可以支持XPath选择符了。第二种就是避免使用XPath选择符。对于本书个别示例中使用的XPath选择符,可以尝试把它们修改为其他等效的选择符——例如,把$(‘tr:not([th])’)修改为$(‘tr:not(:has(th))’)。

2. 阅读本书的背景知识

本书作为介绍流行JavaScript库——jQuery的全球第一部著作,内容丰富、通俗易懂,深受广大读者的喜爱,是学习jQuery的必读图书。但是,由于少数读者对HTML、CSS、JavaScript以及DOM的相关知识掌握还不十分全面,造成了在理解本书个别示例时的困难。如果读者感觉自身还缺少某方面的基础知识,可以结合相关技术书籍和本书共同学习,互为参考,以达到齐头并进的学习效果。在此,推荐人民邮电出版社出版的下列图书。

3. 推荐两个实用的小技巧

(1)有读者反映,在将示例中的提示换成中文时,在某些浏览器中显示不正常——显示乱码。这是一个在学习外版书时普遍存在的问题。由于国外作者保存示例代码文件(.js)或网页文件(.html)时,通常默认采用ANSI编码,而这种编码只支持西方字符。因此,如果要在代码或示例中使用中文,一定要记住把这个文件另存为UTF-8编码格式。

(2)从jQuery 1.2开始,Google为jQuery提供了CDN(Content Delivery Network,内容分发网络)支持,以便用户的浏览器从位于全球各地的Google服务器上就近加载jQuery。这是目前使用JavaScript库的一种最流行、最方便、最快捷的方式。如果读者在试验本书示例时不想把jQuery库下载到本地,也可以使用这种远程加载方式——只要把本书示例页面中的下面这行代码:<script src=”jquery.js”></script>

替换成以下代码即可:

<script src=”http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js” type=”text/javascript”></script>

当然,还有个前提,就是你的电脑必须连接到了互联网。

你在阅读和学习过程中,有任何问题,欢迎致信[email protected]

最后,祝你阅读愉快!

本书中文版(《Flex3实战》)将由人民邮电清华大学出版社出版。经出版方许可,现公开本书5章内容(篇幅相当于全书1/5),供读者预览。
这些“样章”均为未经编辑加工的译稿原件。虽经译者审校,但囿于时间精力所限,其中错误和问题在所难免。如果读者朋友发现了译稿中的错误和问题,麻烦您明确指出,经核实我们一定尽量及时纠正。
对反映问题最多的前3位读者,译者将于本书出版后第一时间,赠送新书一册,以为答谢。

查看全文 »

Tariq Ahmed

Tariq Ahmed

多年来,我一直都在找寻一种方式,一种能够带给用户更好的在线体验的方式。而且,这个找寻历程从Google革命性的Google Maps站点引起轰动之前就已经开始了。我的意思是说,Web用户在很长一段时间里,都不知道还能有什么更好的在线体验。

在把Web当作文档发布系统使用的若干年里,用户体验曾一度在强大的本地桌面应用和乏善可陈的HTML应用之间摇来摆去。但是,贫乏的用户体验并没有对HTML和Web构成冲击——Web作为平台中立的文档发布系统,事实上是非常名符其实的。开发人员和公司专注于Web是因为它支持快速应用程序开发,而用户之所以接受眼前的一切则是由于——嗨!Web应用程序就是这个样子的。真的就是这个样子吗?

有件事曾令我百思不得其解。每次点击都会导致后台系统执行许多代码,而结果反映到UI上却只是一点点变化。而比这更糟的则是对数据库服务器频繁密集的访问。对一名技术人员来说,解决这个问题最简便的办法就是多加内存、使用虚拟机装载,或者少花钱多采购一些杂牌服务器,然后大功告成。但是,我更关心用户要为此付出什么代价。他们会对Web应用程序中常见的点击加等候习以为常;而且,对UI也没有多大的操作自由。不错,可以使用JavaScript;然而,这只是在掌握更高级技术之前的选择。从投入产出角度讲,这样做往往得不偿失。

这时候,Java Applet和Flash问世了,而且乍一看它们正是我要找寻的东西。实际上,Applet作为一个解决方案并不合适,它的体积太大,下载也很慢,况且不能跨平台使用。Flash挺有希望的,可是在设计师的工作环境中创建企业级应用程序,仍然不免有缘木求鱼的味道。

我在eBay的知识管理部门工作期间,也遇到了相同的问题。我需要找到一种方式,能够抽象出数据的复杂性,并且能让用户在可视的环境中方便地操作这些数据。

既而,Flex在2004年发布了(最初是V1,很快就是V1.5)。我当时有权作出采用它的决定,我们的团队也因使用它而感受到了完全不一样的体验。当时,我就知道Flex前途无量。因为Flex应用程序既具有桌面应用程序的强大特性,又能满足软件团队快速开发的需求。

作为Flex支持者,我把推动Flex社区发展当作自己的一项使命。我创建了CFLEX.Net(www.cflex.net),并坚信这个社区的规模越大,通过知识和代码共享产生的反推力也将越大,借此就可以促进这项技术的更快普及。毕竟,强有力的支持网络可以降低在组织中引入新技术的风险。

作为较早采用Flex的人,我在学习Flex的过程中走过不少弯路。主要原因是当时缺少相关书籍和参考资料。这种局面在Flex 2发布后得到了改观,大量的学习资源开始涌现。

我在2005年底离开eBay加入Amcom Computer Services,并在那里创建和管理一个开发团队。同学习任何新技术一样,要熟练掌握Flex也不容易。因此,最好的办法就是不断提升技能。在培训开发人员使用Flex的过程中,我发现市面上的某些图书常常言不及义,很多显而易见的问题都没有提到。

为了进一步推动Flex社区的发展,我决定写作本书,希望它能解决读者经常会遇到的问题。本书一反按功能特性布局谋篇的常见模式,改为按创建应用程序的自然进程组织内容。我只在必要时介绍必要的知识,不会过早地讨论复杂主题。同时,着意缩短的示例代码,也将有助于读者理解和上手。另外,我还发现把新事物与已知事物联系起来,可以增强学习效果。因此,在适当的情况下,我会尽可能拿其他技术的实现原理来进行类比。

希望读者通过阅读本书能够深入理解Flex,并最终加入到Flex社区中——因为届时你也能够向周围的人共享自己的知识和经验。

而现在,则是准备学习Flex的时候。随着社区逐步发展壮大,越来越多第三方厂商会发布与Flex有关的技术,Flex用户组也会在世界各地不断涌现。

随着其他厂商的先后跟进,RIA领域将迅速升温——Adobe再次证明自己走在了前列。我们正处于一个令人振奋的时代!以HTML为基础的Web应用程序始终会占有一席之地;然而,现在是该把你的技能提升到一个新高度的时候了。因为,这个产业的向前发展不会以个别人的意志为转移。

现在请坐下,系好安全带,旅行就要开始了!

TARIQ AHMED

作者简介:

TARIQ AHMED是一位Web应用程序的先驱人物,先后向Bell Canada和Reuters等公司引荐了下一代Web技术。他和Jon Hirschi最早将Adobe Flex引入eBay;随后又被其他项目采用。作为Adoble Flex社区专家,Tariq始终致力于推广这一技术并通过各种项目为社区提供支持。另外,Tariq因他的Community Flex (CFLEX.Net)站点而广为人知。Tariq目前是位于美国于旧金山湾区的Amcom Technology公司的产品开发经理。

JON HIRSCHI自第一个版本开始就致力于Flex的改进。作为Adobe Flex社区专家,他一直通过自己的博客、技术杂志文章和用户组共享其具有专家视角的观点。Jon不仅向eBay引荐了Flex,而且也是eBay负责管理服务器的前沿控制中心的一员。Jon目前是位于美国于旧金山湾区的Kadoink Inc.公司的技术经理。

FAISAL ABID是一名在加拿大多伦多求学的软件工程专业的学生,他拥有自己的RIA咨询公司G-uniX Technologies。他曾为很多客户撰写了RIA方案,包括基于互联网的创业型公司Buzzspot和RazorCom。Faisal的社区业绩包括在各类杂志上发表文章,他也因自己的技术经验而小有名气。

Ryan Stewart

Ryan Stewart

创建RIA(Rich Internet Applications,富因特网应用程序)的技术早于这个概念很久就出现了;Flash Platform是从v8开始支持RIA的。然而,Flash最初的定位只是一种发挥设计人员创意的环境,并不适合开发人员使用。

如果读者使用Flash开发应用程序,那么仍然需要跨越很大的障碍。首先,以高效快捷的方式发布囊括众多功能的富应用程序,就是一项严峻的挑战。因为,你必须亲手完成其中的绝大部分工作。

问题其实很简单:最好是有一个纯粹的开发环境,既能利用业已受到广泛支持、性能优越的Flash,又能直接满足开发人员及其系统开发的需求。为开发人员提供一个得力的工具,再配备一个能替他们完成大多数繁琐工作的框架,从而让他们把注意力集中到应用程序的逻辑上来。这个问题的解决方案就是Flex。

Adobe FlexAdobe FlexFlex自2004年3月由Macromedia发布起,已经过了多年的发展。而且,紧随第一版之后发布的1.5版,同年就取得了更好的销售业绩。Flex最早是作为一种服务器产品开发的,广告里也把它作为在Flash Platform上创建应用程序的一种工具来宣传。
这个工具的推出开启了一个新时代,也点燃了RIA的燎原之火。随着基于Flex的RIA日益受到人们关注,事实已经证明确实存在对RIA的需求,而这种技术手段赖以发展的基础也已具备。下一步就是把RIA推向规模化。

后来,在Adobe的品牌下,这个产品以2006年6月发布的Flex 2为标志取得了巨大的飞跃。主要表现在对语言(ActionScript 3)的重新实现和对Flash Player(V9)的重要升级,极大的提升了它的性能。

而且,开发环境转换到Eclipse平台,也坚定了程序员们的信心。Flex 2关注的是基础开发与服务器端数据管理的衔接问题。我们也知道,首次以免费方式发布的用于编译Flex应用程序的SDK还处在IDE外部。最终,服务器端组件发展成了Flex Data Services,即目前的LiveCycle Data Services,该服务支持实时数据共享。

这些改变都有助于形成更明确的RIA思想,即在浏览器中提供一种桌面应用程序般的体验。而此时,RIA最需要的就是社区支持。

Tariq Ahmed
Twitter

Tariq Ahmed

Tariq AhmedTariq也发现了社区支持的重要性,并走在了前列。为此,他创建了第一个专注于Flex的门户社区,即Community Flex (CFLEX.Net)

CFLEX.Net中汇集了引导人们学习这个新框架的大量经验、技巧、博客、新闻和技术文章。Tariq是社区发展初期上述内容的主要发布者,而我就从他那里学到了很多Flex技能。

Tariq很早就认识到了数据服务及实时数据对于RIA的重要性。他构建了很多Flex应用程序,从企业内部以业务为核心的系统,到面向外部用户的各种项目。他几乎理解并使用了这个平台提供的所有特性,而这也决定了他非常适合成为一本Flex书的作者。我相信,这本由业内专家亲自捉刀撰写的书,正是读者朋友们期待已久的。

Flex 3的发布,把我们带到了这个框架和这门技术的新阶段。Adobe对Flex平台的很多组件开源,目的就是让Flex尽可能透明化,从而有利于接收来自社区的有价值的反馈(当然,也包括有价值的代码)。

随着Adobe AIR的发布,开发人员现在又可以使用Flex部署桌面和基于浏览器的应用程序了。

Adobe过去曾以其伟大的设计工具而闻名。Flex 3是允许设计人员与开发人员紧密协作的第一个工具,可以为设计出漂亮美观的Flex应用程序提供强大支持。此外,这个框架和Flex Builder中包含的大量有助于提高效率的增强,降低了新开发人员使用Flex的门槛,也有助于他们开发出容易扩展的应用程序。

无论你有什么样的开发背景,也不管你对Flex了解多少,相信本书一定会成为你的得力助手。应该说,任何人都可以从本书中学习到有用的东西。Tariq与另外两位作者Jon和Faisal,为我们奉献了一本必备的Flex佳作。别忘了,本书出自深受人们喜爱、拥有许多必知必会资源的Flex社区——CFLEX.Net的头号人物之手。

Adobe Systems, Inc. 平台推广专家
Ryan Stewart

最近,重读了《中文的常态的变态》,余光忠先生在这篇文章里谈到了名词、连词、介词、副词、形容词、动词等西化之病,并告诫译者要知所防范,并希望能举一反三。

重读斯文,触动最大的是形容词那一节,因为该节正击中了我在翻译中的“要害”——形容词前置过多,后饰不足。余先生原文有言:

“形容词或修饰语(modifier)可以放在名词之前,谓之前饰,也可以跟在名词之后,谓之后饰。……”

“目前的白话文,不知何故,几乎一律前饰,似乎不懂后饰之道。例如……‘我见到一个长得像您兄弟的男人。’(I saw a man who looked like your brother)却很少人会说:‘我见到一个男人,长得像你兄弟。’如果句短,前饰也无所谓。如果句长,前饰就太生硬了。例如下面这句:‘我见到一个长得像你兄弟说话也有点像他的陌生男人。’就冗长得尾大不掉了。要是改为后饰,就自然得多:‘我见到一个陌生男人,长得像你兄弟,说话也有点像他。’……”

“后饰句可以一路加下去,虽长而不失自然,富于弹性。前饰句以名词压底,一长了,就显得累赘、紧张、不胜负担,所以前饰句是关闭句,后饰句是开放句。”

几句话,完全点到了我在英译汉过程中最常犯的错误。前些天还在与人讨论英文主词之后加N多从句也不显累赘,但翻译为中文却容易捉襟见肘的问题。现在看来,形容词后置,或者从句后置,不失为解决之道。

原文链接: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之间保持一定距离。

CSS Web Site Design(《CSS Web站点设计手册》)发布了原书勘误,今天翻译出来并补充到了“勘误页面”,供读者参考。

近来,有几位购买了我翻译的《jQuery基础教程》的读者朋友来信,询问了一些问题。本着有信必复的原则,同时也避免“重复劳动”,我把问题和答复放在这里,供广大读者朋友参考。

目前的主要问题有3个:

Q1:关于DOM文档。查看

这个问题是读者对JavaScript与DOM的关系理解不透造成的。

Q2:关于XPath选择符。查看

这个问题是因为jQuery1.2之后不再内置支持XPath选择符造成的。

Q3:jQuery版本。查看
这个问题与Q2类似,因为《jQuery基础教程》基于jQuery1.1,而很多读者下载的则是更高版本。 查看全文 »