
欢迎来到 12 月的 jQuery 社区更新。我们希望您和您的家人度过了一个愉快的假期,并祝愿社区中所有成员新年快乐!
在今天的文章中,我们将介绍 jQuery Core 和 jQuery UI 的更新。我们感谢您对他们的评论和反馈!
通往 jQuery 1.5 的道路
jQuery 团队本月一直在努力准备 jQuery 1.5 的发布。此版本中的一些更新代表了我们通过错误修复和浏览器行为规范化对稳定性和一致性的持续承诺,而另一些更新则是重要的重写,将提高库的性能、可维护性和通用性。
发生了什么变化?
您可以在本文标题为“变更日志”部分中找到我们所做更改的完整列表。目前可用的最大更新是我们的全新改版的 $.ajax 组件,下面由其作者 Julian Aubourg 解释。
您在 ajax 组件中看到的第一个变化可能是新的签名:jQuery.ajax( [ url ] , [ options ])
。这使我们可以更轻松地使用默认选项获取 URL。当然,这仅仅是冰山一角,因为整个组件都是从头开始重写的,以提供许多新功能。
每种请求类型现在都支持超时和中止。本机 XHR 对象现在对开发人员隐藏,并且提供了一个具有相同基本接口的新 jQuery 特定对象作为替代。此“jXHR”对象提供通常的属性和方法来设置和获取标头、中止请求以及查看 readyState、responseXML 和 responseText——但与本机 XHR 对象不同,它也充当 Promise。Promise 允许您即使在请求完成后也添加成功、错误或完成回调;例如,现在可以编写类似 jQuery.getJSON( url ).error( errorCallback )
的代码,并且它始终有效,无论原始请求的状态如何。
在内部,新的 ajax 组件具有可插拔的体系结构,这使得定义新的自定义数据类型和传输变得容易。自定义数据类型允许您为应用程序代码提供一致的响应对象,无论原始数据格式如何,自定义传输允许您执行诸如模拟 ajax 请求以进行测试、使用浏览器特定的网络对象(如 XDomainRequest)或使用完全不同的机制执行远程调用(如 iframe 或 postMessage)之类的操作,而无需编写大量代码。最棒的是,任何此类添加都可以立即访问 jQuery.ajax 的全部功能(参数序列化、超时、延迟回调等),并通过您已经熟悉的 $.ajax API 公开给应用程序代码。
最后,在现有的 ajax 选项中添加了一些灵活性,并添加了一些新的选项。例如
- 您可以为成功、错误或完成提供回调数组。非函数将被过滤,数组将被扁平化,因此您可以通过执行
options.complete = [ yourCompleteCallback , options.complete ]
轻松地在所有其他回调之前添加一个完成处理程序!
- 新的“headers”选项可以设置请求标头的映射,避免了仅仅为了设置标头而需要 beforeSend 回调的麻烦。
我们非常重视确保现有的单元测试通过,并且还添加了许多其他测试以帮助确保一切都按预期运行并且不会破坏现有代码。
我如何才能帮助?
与往常一样,我们希望邀请社区贡献新的补丁或帮助我们测试更改,以便我们能够尽快识别和纠正任何问题。
要执行测试,只需尝试将 jQuery 的开发版本(jQuery-GIT) 放入现有应用程序的副本中。如果您遇到异常或发生一些奇怪的事情,请登录到错误跟踪器并 提交错误。请务必将版本下拉菜单设置为“git”。您还可以通过在侧边栏中选择“jQuery 0 GIT”从下拉菜单中测试 jsFiddle 上的代码。
要贡献补丁,Rick Waldron 编写了一份出色的 jQuery 错误修复指南,该指南介绍了如何开始使用 git、构建和测试 jQuery 以及如何查找新的错误来解决。如果您打算提交补丁,您还应该加入 Freenode 上的 #jquery-dev 频道,这是大多数关于 jQuery 开发的讨论发生的地方。
当前变更日志
- 1. Julian Aubourg 重写了 Ajax 模块。这是此版本中最重要的更改,并为 $.ajax 带来了许多性能、稳定性和功能改进。更多信息可以在上面找到。#7195
- 2.jQuery 现在将自身注册为一个 CommonJS 异步模块。这允许 jQuery 参与使用兼容加载器(如 RequireJS 和 Yabble)的浏览器模块加载。#7102
- 3.使用 noConflict() 时删除了 expando 冲突的可能性(V8 很快!)。expando 字符串现在使用随机数 + jQuery 版本来区分 jQuery 的实例,而不是毫秒时钟时间。#6842
- 4.对 $.get 和 $.post 中的代码进行去重。#7847
- 5.当本机浏览器事件在 DOM 中冒泡时,确保 jQuery 的事件对象反映了正确的 isDefaultPrevented 值。#7793
- 6.不再在 buildFragment 中缓存非 html 字符串,以避免与 Object 方法(如 toString)的名称发生可能的冲突。测试表明这可能会带来适度的性能改进。#6779
- 7.更新了 cloneCopyEvent,使其在克隆元素时不会创建多余的数据对象。公开了一种新方法 $.hasData,用于确定对象是否包含任何数据。#7165
- 8.在复制事件时使用 for 循环而不是 for/in 循环,以便代码可以在增强的 Array.prototype 中使用。#7809,#7817
- 9.修复了 fadeIn 在内联元素中无法正常工作的问题。#7397
- 10.重写了 IE 的克隆函数,使其在所有已知情况下都能正常工作。#4386,#5566,#6997
- 11.修复了 IE 在对普通 JS 对象分派“submit”事件时出现崩溃的问题。#6398
- 12.修复了 1.4 中导致脚本传输的缓存控制设置不正确的回归问题。#7578
- 13.提高了 get() 在负索引下时的性能。#5476
- 14.如果属性包含回车符 (\r) 字符,则 hasClass、removeClass 在 IE 中无法正常工作。#7673
- 15.修复了 1.4.4 中的回归问题,其中调用没有参数的 $.fn.data 在非 DOM 元素上会中断。#7524
- 16.修复了 IE 中由 $.ajax 的自定义中止函数引起的内存泄漏。#6242
- 17.阻止 IE 中的禁用元素触发实时事件。#6911
- 18.修复了 1.4.3 中的回归问题,该问题导致将 Location 对象发送到 $.ajax 无法正常工作。#7531
jQuery UI 1.8.7 和 Spinner、Menu 和 Tooltip
jQuery UI 团队也一直在忙着做新东西。以下是来自他们的更新
自从我们上次社区更新以来,jQuery UI 1.8.7 已经发布。这带来了对 jQuery 1.4.4 的支持,但也为 Button、Progressbar 和 Datepicker 提供了显著的更新。有关此版本的完整详细信息,请阅读 jQuery UI 1.8.7 发布说明。
此外,Jörn Zaefferer 为 jQuery UI 主分支 推出了三个新的插件:Spinner、Menu 和 Tooltip。这三个小部件已经开发了一段时间,并且每个都拥有自己的里程碑版本。有关这些新小部件的更多信息,您可以在上面它们各自的版本页面上阅读。我们希望邀请社区测试并提供有关这些新小部件的反馈,如果您发现任何需要报告的错误或问题,可以在 jQuery UI 开发中心 找到操作说明。
jQuery 每周开发会议
从 2011 年 1 月 4 日开始,我们将试行每周在 freenode 的 #jquery-meeting 频道中举行 jQuery 开发会议的想法,参与者包括核心开发者和贡献者。这些会议的议程将提前公布,任何想参加的 jQuery 社区成员都非常欢迎。我们的第一次会议将于 1 月 4 日星期二美国东部时间晚上 9 点举行,讨论主题将包括 jQuery 1.5 路线图、票证分类以及基础设施讨论。此次会议的完整议程可以在 这里找到。
Wijmo 在 jQuery 播客上
对于 官方 jQuery 播客 的粉丝,我们想提醒您,第 40 集 现已可供流式传输或下载。在本集中,我们与 ComponentOne 的 Chris Bannon 讨论了名为 Wijmo 的全新基于 jQuery UI 的库。
捐赠
jQuery 有助于让您的开发生活变得更加轻松吗?如您所知,jQuery 是一个开源项目,依赖于我们宝贵的志愿者和社区成员的时间和努力,并且完全由公众捐赠提供资金。如果您发现 jQuery 有用,我们想谦虚地请您考虑做出少量贡献(即使是 10 美元也能产生很大影响)。jQuery 项目是 Software Freedom Conservancy 的一部分,因此您做出的任何捐赠都是完全免税的。有关财务贡献的更多信息,请访问 http://jquery.org/donate。
如果您无法捐赠任何资金,我们始终需要有才华的软件开发人员、IT 专业人员和各行各业的极客来帮助开发和维护 jQuery 及其相关属性。如果您有兴趣贡献一些时间来帮助让 jQuery 变得更好,请与 团队成员 联系,或在 Freenode 的 #jquery 频道中提问。
本次更新就到这里了!感谢您的阅读;我们期待您的反馈。