jQuery UI Grid 的现状

发布日期: 作者:

我们在 2 月份宣布了 Grid 项目。从那时起,我们完成了前三个阶段,现在正开始进行第四阶段。在这篇文章中,我们将回顾一下到目前为止我们所构建的内容。

Grid

这就是我们设计的“零功能网格”。它所做的只是增强 HTML 表格,但它做得很好,同时还为所有类型的其他功能提供了正确的挂钩,我们可以在此基础上添加这些功能。事实证明这非常有用,因为有很多事情是普通的 HTML 表格无法做到的。使用 Grid,您可以获得

  • 使用 CSS 框架进行样式设置,使其能够与 ThemeRoller 兼容
  • 基于表格标题的正确标题栏
  • 表格主体滚动所需的标记和样式,同时保持标题固定

Grid 的 API 控制要渲染的内容以及如何呈现内容

  • columns 选项指定要渲染的列。如果未指定,它将拾取现有的表格标题元素。
  • rowTemplate 选项允许网格从自定义模板渲染每一行。如果未提供此选项,则每行将根据 columns 选项生成。
  • source 选项以普通对象数组的形式指定要渲染的内容。如果未指定,将使用现有的表格行。
  • 默认情况下,网格的主体随行数增长。使用 heightStyle: ‘fill’,它保持固定高度,如果存在更多行,则主体将开始滚动。
  • 当从现有的表格标题中获取列信息时,将读取某些 data-attribute。Grid 本身仅使用 data-property 属性(以及每个标题单元格的实际文本),但 dataFields 选项指定其他组件可以使用的一些其他属性,例如“type”、“culture”和“format”,以配置本地排序和过滤。如果网格附加组件处理其他 data-attribute,则将它们添加到 dataFields 选项将使它们作为 columns 选项的一部分自动可用。

到目前为止,我们只有一个增强的表格,但通常网格需要从某些远程资源中获取数据。这就是 Dataview 的用武之地。

Dataview

Dataview 是用于检索内容的低级抽象。它有一个 API 用于指定要检索的内容,以及一个 SPI(服务提供程序接口),由提供该内容的组件实现。内置了用于过滤、排序和分页的选项,并且设计使其易于添加更多选项,例如分组。API 默认情况下是异步的,即使对于本地数据也是如此,因此所有依赖于 Dataview 的组件都可以使用本地和远程数据。

Dataview 仅依赖于 Widget 和 Observable(我们将在下面介绍),而不依赖于 Grid。这允许 Dataview 在各种情况下使用。例如,它可以为产品列表提供支持,例如 eBay 或亚马逊上的产品列表,其中表格表示形式不是合适的格式。

Dataview SPI 使得从头开始编写实现以及创建可重用的扩展变得容易。

例如,我们可以使用自定义 dataview 作为 Autocomplete 小部件的输入。相同的数据也显示在输入字段下方的网格中。这演示了 Dataview 如何在多种表示中使用,其中每个表示都决定自己要显示哪些数据。

至于可重用的扩展,我们目前已实现三个

  1. localDataview 获取一个输入数组,并对该数组进行排序、分页和过滤。它使用 Globalize(见下文)来实现本地化数字和日期的过滤和排序。当与表格中的现有内容(不指定 source 选项)上的网格组合使用时,您将获得一个完整的表格排序器
  2. odataDataview 获取一个资源 URL,指向理解OData(开放数据协议) 的 Web 服务。虽然我们的实现尚未涵盖所有 OData 选项,但您可以使用它进行排序、过滤和分页,而无需实现任何自定义请求/响应映射。我们有一个使用基于 OData 的 Netflix API 的网格示例
  3. preloaderDataview 包装一个 Dataview 并调整分页行为以加载比渲染的更多数据,在预加载另一批之前本地分页。在这个Flickr API 幻灯片示例 中,我们预加载了 API 响应和实际图像。这将所有加载推送到后台,允许用户在没有中断的情况下浏览图像。

所有三个都需要在实际项目中进行测试,然后我们才能将其视为稳定版本。我们也正在寻找 Dataview 的其他用例,我们可能忽略了一些用例。

Observable

数据绑定目前是更新的 JavaScript 框架中的常见主题,有各种竞争解决方案可用。我们还没有一个功能齐全的替代方案,但我们开发了一个低级抽象,它可能会在将来为数据绑定组件提供支持。我们称此抽象为 Observable。它提供了一个 API 用于对可以被观察到事件监听的普通 JavaScript 对象和数组进行更改,每个更改都会触发这些事件。我们设计 Observable 具有很少的方法和事件,其目的是使其易于在其他环境中实现相同的 API。这些事件是

  • change:在一个或多个属性发生更改后,在对象上触发。
  • insert:在插入一个或多个新项目后,在数组上触发。
  • remove:在删除一个或多个项目后,在数组上触发。
  • replaceAll:在替换数组中的所有项目后,在数组上触发。

最后一个事件乍一看可能很奇怪,但它可以创建一个 dataview,将其传递给网格,让网格订阅该 dataview 的输出数组上的事件,然后在 dataview 更新时更新自身。

对于所有四个事件,Observable 提供了方法对应项

  • property:用于处理对象
  • insert、remove 和 replaceAll:用于处理数组。

用法在两种情况下都一致

  • $.observable( object ).property( “name”, “Fred” );
  • $.observable( array ).insert({ name: “Peter” });

我们仍在研究 Observable。下一步是找到一个用于数组绑定的抽象,这将从 Grid 以及待办事项应用程序演示 中移除一些开销。

当将 Observable 与 Grid 组合使用时,我们可以轻松地添加编辑功能。在我们的网格编辑演示 中,您可以向表格中添加、编辑和删除开发者。结果通过 localStorage 持久化。

我们可以使用可选择交互来选择一行或多行,然后与选择进行交互,而不是添加具有“编辑”和“删除”按钮的自定义列。在该演示中,selected 数组也是一个可观察数组,第二个网格会显示该数组。请注意,您可以选择一页上的行,转到下一页(您可能需要添加一些开发者才能显示第二页),使用 command/ctrl-单击选择更多行(以扩展选择),它将在第二个网格中显示所有这些行。选择状态与视觉表示分离,使跨多页的选择非常容易。

Globalize

Globalize 最初是从 jquery-global 插件开始的。我们将其重写为 Grid 项目的一部分,使其独立于 jQuery,允许在客户端和服务器 上使用。我们的 localDataview 实现(如上所述)使用它,它也是自定义输入(如SpinnerTimepicker)背后的原因。

MaskTimepickerSelectmenu

这三个自定义输入正在作为 Grid 项目的一部分开发。它们旨在用于 Grid 中的内联编辑,以及在常规表单或网站中的独立使用。我们即将将所有三个都放到 master 分支中,以便将它们作为 1.9 的一部分发布。

还有更多...

我们仍在研究TemplateDatepicker 和其他Custom Inputs。一旦我们有了更稳定的解决方案,我们将对此进行报告。

下一步

我们正在完成现有的组件,并开始进行第 4 阶段。有关详细信息,请查看主要的 Grid wiki 页面

那么,什么时候完成呢?

我们的路线图 将 Grid 列在 2.1 版本中,而 jQuery UI 的主要关注点是 1.9。换句话说,在我们能够将 Grid 放入稳定版本并与所有其他组件一起支持它之前,还有很多工作要做。与此同时,我们鼓励您现在就开始测试上面概述的功能。Grid、Observable 和 Dataview 都非常稳定并且运行良好。Globalize 是一个独立的项目,如果您想在客户端支持本地化数字和日期处理,您现在应该开始使用它。

我们重视您的意见和帮助。请使用Developing jQuery UI 论坛,评论单个 wiki 页面或访问我们的 IRC(Freenode 上的 #jqueryui-dev)。如果您找到了解决问题的方法,请发送拉取请求

Dialog API 重构

发布日期: 作者:

在继续 API 重构的过程中,我们计划对 Dialog 小部件进行一些更改。我们知道,像这样的 API 更改对我们的用户并非没有成本,因此我们想明确表示,除非另有说明,jQuery UI Dialog 在 1.9 中将同时支持 1.8 API,并且已弃用的 API 不会在 jQuery UI 2.0 之前移除。了解更多关于完整的 jQuery UI API 重构

API 重构

在对话框中包含焦点
我们目前只在模态对话框中包含焦点。我们将更改此行为,始终包含焦点,即使在非模态对话框中也是如此。这将使我们更符合 DHTML 样式指南。我们不确定是否要实现一个用于将焦点移出对话框的按键命令(例如 F6),因为这将需要定义一个用于跟踪焦点应移到何处的系统。

允许禁用对话框
对话框目前不支持禁用。它们确实继承了添加 ui-state-disabled 类的默认行为,这使得对话框看起来被禁用了,但用户仍然可以与对话框中的元素进行交互。为了支持禁用对话框,我们将在对话框上放置一个 div 以防止鼠标交互。

能够配置哪个元素获得焦点
打开对话框时,我们会搜索可获取焦点的元素,并聚焦找到的第一个元素。如果没有可获取焦点的元素,那么我们会聚焦对话框本身。我们将添加一个 autoFocus 选项,它将允许自定义哪个元素获得焦点。该选项将接受一个函数,该函数将返回要聚焦的元素。该选项的默认值为当前实现。如果使用该选项没有找到任何元素,则将聚焦对话框。

在销毁时将对话框移回原始 DOM 位置
创建对话框时,它们会被移动到 body 的末尾。销毁对话框时,它们目前会停留在 body 的末尾。我们将更改此行为,以便将对话框(如果可能)返回到原始位置。这将通过在创建时跟踪一个兄弟元素或父元素来实现。

自动堆叠
stack 选项控制对话框在获得焦点时是否会移动到其他对话框之上。由于这应该是始终如此,我们将删除该选项并强制执行此行为。此外,我们可能会删除 moveToTop 方法,因为根据对话框打开的时间以及它们是模态还是非模态,适当的对话框应该始终对用户可用。

更合理的模态
当前用于管理模态对话框的实现有点笨拙,它比较元素的 z-index,并且经常会导致问题。我们计划简化实现并切换到基于层次结构的解决方案,而不是基于样式的解决方案。

反馈

我们很乐意听到您对这些更改的反馈意见。我们希望确保在最终确定和实施这些更改之前解决社区可能遇到的任何问题。如果您有任何反馈意见,请在 相关论坛帖子 上发布。谢谢。

ARIA 黑客马拉松总结

发表于 作者

ARIA 黑客马拉松的最初想法是让 jQuery UI 的开发者和 ARIA 专家在一个房间里聚在一起,让他们互相认识,分享知识并致力于 jQuery UI 的无障碍性。

在多伦多 OCAD 大学的包容性设计研究中心 (IDRC) 会面,jQuery UI 团队的几位成员(Richard、Scott、Dan、Jörn),OCAD 的多位开发者(Michelle、Justin、Antranig、Harris),以及来自多伦多(Ates、George、Darcy)和更远的地方(来自波士顿的 Mat,来自华盛顿大学的 Candace 和 William,以及来自伊利诺伊大学的 Jerry)了解了大量关于为屏幕阅读器用户进行测试和开发的信息,了解了 ARIA 标准及其流程,以及 Mozilla 在无障碍性方面的工作。

  • Colin Clark 对 IDRC 团队的工作进行了概述,包括利用 jQuery UI 的 Fluid 项目。
  • Hans Hillen 提供了许多关于使用 JAWS 和 NVDA 进行测试和开发以及 ARIA 规范和 DHTML 样式指南的非常实用的见解。
  • Jospeh Scheuhammer 积极参与 ARIA 标准流程,他提供了关于该流程如何运作、如何提供反馈以及哪些文档可以和应该与主要规范一起使用等的见解。
  • David Bolter 对 Mozilla 在 Firefox 无障碍性方面的努力进行了概述,还涵盖了 Firefox Mobile 的现状和未来。
  • 最后,Jennison Asuncion 演示了在普通网站上使用 JAWS,让观众(更确切地说,是听众)更好地了解盲人用户如何实际使用屏幕阅读器。他也是一个非常友善的人。

在小组讨论中,我们定义了最新版本的 NVDA 在最新版本的 Firefox 上作为支持 ARIA 和无障碍性的设置,同时还在 Windows 上的 JAWS 和 OSX 上的 VoiceOver 上进行了测试。如果代码可维护并且不会破坏符合规范的 AT 中的 ARIA,我们将接受对其他或旧版 AT 的合理补丁。

在为期两天的主要活动结束后,Hans 和 Jörn 停留到星期五,致力于多个 jQuery UI 小部件的键盘和无障碍性实现。Jörn 还与 OCAD 的 Justin 和 Michelle 以及 Mozilla 的 Bobby 和 David 会面,以招募他们加入 jQuery UI 和测试子团队(QUnit、TestSwarm)。他们之间有许多共同的兴趣,这应该会导致今后更多合作。

特别感谢 IDRC 和 Colin Clark 主办此次活动,以及 Mozilla 和 David Bolter 为部分差旅和住宿费用提供资金。

如需查看大部分完整的与会者名单(以及指向 Twitter 和 GitHub 个人资料的链接)以及活动期间收集的各种资源,请访问 我们计划 wiki 上的活动页面

API 重构:过去、现在和未来

发表于 作者

早在 11 月,我们就宣布了 众多 API 重构中的第一个。在那篇文章中,我们简要地说明了我们的总体目标

jQuery UI 正在进行 API 重构,这将缩减 API 的大小,以提供更稳定的代码库,使其更易于学习和使用。我们将在接下来的几周内发布提议的更改,以便收集社区的反馈意见。我们的目标是在 1.9 中同时支持旧版(当前)和新版(提议)API,然后在 2.0 中删除对旧版 API 的支持。

现在三个月过去了,两件事很清楚:1)发布所有提议的更改需要不止几周时间;2)我们没有提供足够的信息来介绍计划的更改以及背后的原因。

过去

jQuery UI 刚创建时,它是新插件和现有插件的组合。引入现有的、流行的插件对每个人都有益:jQuery UI 发布时间更早,拥有更多插件,原始作者的辛勤工作得到了 jQuery 项目的公开认可和支持,并且现有用户群获得了对他们正在使用的代码的官方支持。不幸的是,这种方法有一个缺点。由于现有插件是由不同的作者使用不同的设计原则和不同的编码风格编写的,因此 jQuery UI 内部缺乏一致性。在 1.0 到 1.8 版本之间,曾尝试标准化 API 的各个部分,但从未有过足够大的协调工作来进行必要的更改。

除了插件之间的不一致性之外,在过去三年半的时间里,还出现了其他问题。随着用户要求越来越多的功能,选项、方法和事件的数量持续增长。随着时间的推移,这导致了我们今天所看到的现状,即使像拖放元素这样简单的东西也有近 30 个选项。一方面,能够处理如此多的用例令人印象深刻,通常只需使用其中的一两个选项即可。另一方面,对于新用户来说,找到合适的选项可能是非常困难的任务,尤其是当选项数量众多时。

现在

认识到现有的问题,我们在 1.8 版本中采取了不同的方法。我们定义了一个新的插件构建流程,该流程侧重于简化 API,使其易于扩展。随着 1.8 版本的成功,特别是 Autocomplete 小部件的简洁性和灵活性,我们确信我们的新流程正在发挥作用。有了新的流程和新的标准,我们决定重新设计所有现有的插件,使用相同的设计流程。10 月份,jQuery UI 团队在波士顿聚在一起,对所有现有的插件进行第一次重新设计。几周后,我们开始发布提议的更改,以收集社区的反馈意见。我们仍在为特定插件处理一些细节。

我们的目标是在 2.0 版本中拥有一个完全更新的项目。我们将拥有更简单的 API、更好的稳定性、完整的文档以及每个插件的完整测试套件。但是,实现这一目标将需要进行大量向后不兼容的更改。我们意识到这可能会造成痛苦,并且我们正在尽一切努力来减轻升级带来的痛苦。具体来说,我们在实施新 API 时会做以下几件事

  • 确保我们拥有 2.0 API 的完整测试套件
  • 创建 1.8 API 的单独测试套件
  • 在新功能之上重新实现任何已弃用的功能
  • 在旧版和新版 API 无法并存的情况下默认使用 1.8 API

这种方法有几个优点,其中一个最重要的优点是升级到 1.9 应该不会破坏任何现有的页面。事实上,1.9 版本将比任何 1.8.x 版本更好地支持 1.8 API。随着插件针对 1.9 进行重构,1.8.x 中存在的许多错误将被修复,而其中一些修复将难以移植到 1.8 分支。由于 1.9 版本中对 1.8 API 的支持实际上是在 2.0 API 之上构建的新代码,因此它受益于这些错误修复。为 1.8 API 添加完整的测试套件确保了这些错误实际上在两个 API 中都被修复。

默认情况下完全支持 1.8 API 对升级到 1.9 很有帮助,但它无法提供一种方法来确定您是否已准备好升级到仅使用 2.0 API。为了解决这个问题,我们添加了一个新的标志,jQuery.uiBackCompat。如果您加载 jQuery,然后设置 jQuery.uiBackCompat = false,然后加载 jQuery UI,则不会加载任何 1.8 API。这将导致只有 2.0 API 可用,并且允许您测试页面的新 API 兼容性,并确信您将在 2.0 发布时准备好升级到 2.0。

未来

当 jQuery UI 2.0 发布时,我们将不再支持 1.8 API。但是,1.9 中的 1.8 API 兼容层应该继续工作;它只是不会包含在 2.0 版本中,并且不再获得官方支持。所有新的插件都将通过新的设计流程,因此像这样的重大 API 更改不应该再次发生。一旦现有的插件更新到我们的新标准,我们应该能够比以前更快地推进项目。

值得一提的是,只有小部件、实用程序和效果在 1.9 中被重构。所有交互都将在 2.0 中被重写,因此它们将经历不同的实现过程。作为 jQuery UI 的用户,除了发布时间之外,在小部件重构和交互重写之间应该没有太多感知上的差异。

我们知道,没有人期待重构现有代码以适应 API 更改,我们正在努力确保过渡过程清晰简单。我们希望您,我们的用户,理解我们需要抓住这个机会改进 jQuery UI,使其在长期内更加健壮、可扩展和易于维护。

选项卡 API 重设计

发布日期 作者

继续API 重设计,我们对选项卡小部件有一些计划更改。我们知道像这样的 API 更改并非没有代价,因此我们想明确表示,除了特别说明的地方外,**jQuery UI 选项卡在 1.9 中也将支持 1.8 API**,并且已弃用的 API 不会在 jQuery UI 2.0 之前被移除。

API 重构

移除旋转。
rotate 方法将被移除,因为它并不常见,并且一直作为内置扩展来实现。这实际上将被移除,而不仅仅是在 1.9 中被弃用,因为它一直作为扩展存在。Christopher McCulloh 基于原始代码有一个增强的旋转扩展

彻底改造 ajax 选项卡
ajaxOptionscache 选项将被移除,取而代之的是一个新的事件:beforeloadbeforeload 事件将接收一个 jqXHR 对象和将传递给 jQuery.ajax() 的设置对象。ajaxOptions 通过修改传递给 beforeload 的设置来替换,缓存可以通过调用 event.preventDefault() 来实现,以防止 ajax 调用并直接跳转到显示选项卡。我们还将保持 href 属性不变,并将面板 ID 存储在 aria-controls 属性中。aria-controls 属性将为所有选项卡设置,无论它们是本地还是远程。这将消除对 url 方法的需求,该方法也将被移除。可以在 aria-controls 值中预先定义一个值以用于远程选项卡,从而消除了在 title 属性(也已被移除)中指定位置的必要性。abort 方法将被移除,因为 jqXHR 对象将可以直接访问,因此您可以直接中止 ajax 调用。beforeload 事件的另一个好处是,当与现有的 load 事件配对时,您可以创建自定义加载功能;因此,我们正在移除 spinner 选项。

选中 vs. 活动
为了提高 jQuery UI 套件内部的一致性,select/selected 将在整个套件中重命名为 activate/active。这对选项卡意味着 selected 选项将被重命名为 activeselect 事件将被重命名为 beforeactivateshow 事件将被重命名为 activatebeforeactivateactivate 选项将包括对旧选项卡和新选项卡的选项卡和内容面板的引用,类似于手风琴。此外,select 方法将被移除,取而代之的是设置 active 选项。最后,deselectable 选项将在 1.9 中被移除,因为它在 1.8 中已被弃用。

移除模板化
所有与模板化相关的选项都将被移除。选项卡中的模板化是一个一次性实现,与 jQuery UI 的其余部分不一致。此更改包括移除 idPrefixtabTemplatepanelTemplate 选项。

添加和移除选项卡
addremove 方法将被移除,取而代之的是一个新的 refresh 方法。这与初始化后更新新插件的方式一致。移除这些方法也意味着 addremove 事件将被移除。

启用和禁用选项卡
选项卡将正确支持禁用单个选项卡或整个选项卡集。可以使用布尔值来禁用整个集,或者可以使用索引数组来禁用单个选项卡。此外,enabledisable 事件将被移除,以与其他小部件保持一致。

移除长度方法
length 方法将被移除,因为它没有太多用途,可以通过计算列表项的数量轻松地计算出来。

移除 cookie 选项
cookie 选项将被移除,因为 cookie 支持不是插件的核心功能。跨页状态管理应该很容易,但不要内置。

设计更改仍在变化中
我们还没有完全解决的几件事。我们计划用 showhide 选项替换 fx 选项,以与其他小部件保持一致,但仍在解决一个关于如何在插件之间支持效果的开放性问题。我们还想移除 load 方法,但我们需要验证它是否可以作为扩展构建。在我们进入新的实现之前,我们还不知道这是否可行;如果不可行,load 方法将保留在插件中。

反馈

我们非常乐意听到您对这些更改的反馈意见。我们希望确保在最终确定和实施这些更改之前解决社区可能遇到的任何问题。如果您有任何反馈意见,请在相关论坛帖子中发表。谢谢。

释放网格

发布日期 作者

jQuery UI 团队很自豪地宣布,我们正在构建一个丰富、快速的网格小部件,它将使用数据链接、排序、分页、过滤、行选择和内联编辑来增强 HTML 表格。作为此过程的一部分,我们将构建网格的功能作为独立的小部件,并重新审视现有的 jQuery UI 组件。在这个过程结束时,我们不仅会拥有一个网格,还会拥有一个经过更好地测试、功能更全面的用户界面库。

当前进展

我们即将完成项目第一阶段的开发,该阶段包括创建通用数据模型、数据类型解析和标记。此阶段将最终形成一个“零功能网格”,一个增强的 HTML 表格,它支持 jQuery UI CSS 框架,并作为其他网格功能的基础。有关未来阶段的计划工作详细信息,请参阅路线图

开发方法

已经存在许多高质量的 jQuery 网格插件。我们认识到它们都拥有令人印象深刻的功能集、能力和 jQuery 社区成员的使用水平。我们正在研究和应用来自当今最流行的网格和数据表插件的实践和技术,包括当前的热门插件,如SlickGridjqGridDataTables,以及一些已经很久没有更新的插件,如TablesorterFlexigridIngrid。我们邀请所有这些插件和其他网格插件的作者和用户参与 jQuery UI 网格的设计。

没有发明?

正如您可能想象的那样,我们是 jQuery UI API 的忠实粉丝。我们相信,对复杂插件使用一致的界面对用户来说是一个巨大的胜利。过去,我们有时会修改已经完成的插件。不幸的是,这种方法会导致与遗留错误相关的头痛,与我们 API 的其他部分不一致,以及对原始设计决策的不熟悉。通过从头开始构建,我们可以确保每行代码都经过了审查,并且我们称之为“jQuery UI”的任何网格都符合我们的标准。

不仅仅是一个网格

我们不仅在开发一个网格,还在设计和构建模块化且可扩展的组件,例如排序、分页、过滤和就地编辑,这些组件可以组合成一个网格。我们相信 jQuery UI 用户会发现为支持网格而构建的新工具套件令人信服且具有创造性。

重构交互

虽然 jQuery UI 的鼠标交互插件在许多情况下运行良好,但我们也清楚地意识到它们存在一些持续存在的缺陷,包括它们在表格上正常运行的能力。作为网格开发的一部分,我们将对交互插件进行期待已久的重构,以简化它们的 API,解决边缘情况,并确保它们普遍适用于更广泛的上下文。

加入我们!

您想帮助设计和构建 jQuery UI 网格吗?分享您的反馈意见?加入我们网格规划维基页面。您可以随时关注开发进度,并在 jQuery UI 的网格分支上测试最新的迭代版本。

赞助商

这项工作得益于个人和企业赞助商的大力捐助。这些赞助商捐赠了财务和开发资源,以确保网格工作能够在未来 5-6 个月内继续进行。

特别是,jQuery 项目想要感谢以下(截至今日)jQuery UI 网格项目的赞助商

双白金网格赞助商

  • Microsoft – Microsoft Web 平台和工具团队构建了许多用于开发网站的技术,包括 ASP.NET、ASP.NET MVC、IIS、Visual Web Developer 和 Web Matrix。
  • Adobe – Adobe Systems Incorporated 提供商业、创意和移动软件解决方案,彻底改变了世界与想法和信息互动的方式。
  • 白金网格赞助商

  • Wijmo – Wijmo 是一个包含 30 多个 jQuery UI 小部件的完整套件。它混合了 jQuery、CSS3、SVG 和 HTML5,这些元素结合在一起,成为网络上不可阻挡的力量。

如果您或您的公司有兴趣成为 jQuery UI 网格的赞助商,请联系我们

位置 API 重设计

发布日期 作者

继续API 重设计,我们对位置实用程序有一些计划更改。

API 重构

将偏移选项合并到 my 和 at 选项中
偏移选项将被移除,取而代之的是将偏移量作为 my 或 at 选项的一部分。
例如,你现在可能会这样做

$( "#elem" ).position({
    my: "left top",
    at: "left top",
    of: "#otherElem",
    offset: "50 20"
});

现在你将这样做

$( "#elem" ).position({
    my: "left+50 top+20",
    at: "left top",
    of: "#otherElem"
});

无论你是在 my 还是 at 选项中包含偏移量,偏移量都会根据最终位置进行调整,就像当前的偏移量选项一样。我们还计划支持百分比,这样你就可以根据元素宽度或高度的百分比来偏移元素。如果你在 my 选项中指定百分比,那么百分比将基于被定位元素的大小。如果你在 at 选项中指定百分比,那么百分比将基于被定位元素的相对大小。
例如,要将元素放置在屏幕下方 1/4 处并水平居中,你可以这样做

$( "#elem" ).position({
    my: "center top",
    at: "center top+25%",
    of: window
});

要将元素定位,使其只有左侧 10% 可见,你可以这样做

$( "#elem" ).position({
    my: "left-10% center",
    at: "right center",
    of: window
});

更好的碰撞处理
目前碰撞处理相当简单。如果你启用了碰撞(通过指定 fit 或 flip),插件将检测是否存在碰撞,如果存在,它将相应地移动元素。但是,根据元素的大小,这种调整实际上可能会导致更少的元素可见。我们计划使碰撞处理更智能,这样它永远不会使定位更差。API 不会有任何变化,只是碰撞处理会更好。

反馈

我们非常希望听到你对这些更改的反馈。我们希望确保在我们最终确定并实施这些更改之前,解决社区可能遇到的任何问题。如果您有任何反馈,请在 相关的论坛帖子 上发布。谢谢。

进度条 API 重构

发布于

正如 之前所述,jQuery UI 正在进行 API 重构,这将缩减 API 的大小,以提供更稳定的代码库,使其更易于学习和使用。这篇文章列出了进度条小部件的拟议更改的详细信息以及每个更改背后的原因。

API 重构

添加对不确定进度条的支持。
我们之前说过,不确定进度条应该是一个单独的小部件。但是,有一个很常见的用例,你可能希望在知道实际进度之前就开始提供有关任务已启动的反馈。在这种情况下,你可能希望从不确定进度条开始,并在获得足够的信息以提供详细信息后切换到确定进度条。为了支持这一点,我们将允许 value 选项设置为 false,以指示进度条应该是 不确定的。

从不确定状态切换到确定状态将如下所示

$( "#progressbar" ).progressbar({
    value: false
});

// later when you find out more information
$( "#progressbar" ).progressbar( "option", {
    value: 15,
    max: 250
});

反馈

我们非常希望听到你对这些更改的反馈。我们希望确保在我们最终确定并实施这些更改之前,解决社区可能遇到的任何问题。如果您有任何反馈,请在 相关的论坛帖子 上发布。谢谢。

手风琴 API 重构

发布于

jQuery UI 正在进行 API 重构,这将缩减 API 的大小,以提供更稳定的代码库,使其更易于学习和使用。我们将在接下来的几周内发布拟议的更改,以便从社区收集反馈。我们的目标是在 1.9 版中同时支持旧(当前)和新(拟议)API,然后在 2.0 版中删除对旧 API 的支持。这篇文章列出了手风琴小部件的拟议更改的详细信息以及每个更改背后的原因。

API 重构

删除 navigation 和 navigationFilter 选项。
与导航相关的选项将被移除,取而代之的是在初始化期间设置 active 选项。内置的导航过滤器并不总是合理,并且默认情况下处于关闭状态。我们计划添加一个演示,展示如何实现当前的导航功能以及如何使用 cookie 来存储活动面板。

将 autoHeight、fillSpace 和 clearStyle 选项合并到一个名为 fixedHeight 的新选项中
autoHeight、fillSpace 和 clearStyle 选项都处理类似的问题,因此不能一起使用。为同一个功能(面板的高度应该如何)提供三个选项会创建一个复杂且令人困惑的 API。这三个选项将被一个名为 fixedHeight 的单个布尔选项替换。当设置为 true(默认值)时,所有面板将具有相同的高度。如果手风琴的高度为“auto”,则所有面板的高度将与最高的面板相同(相当于 autoHeight: true)。如果手风琴具有显式高度,则所有面板的大小将基于该高度(相当于 fillSpace: true)。当 fixedHeight 设置为 false 时,不会对面板的高度进行任何计算,它们的大小将根据其内容进行调整(相当于 clearStyle: true)。

将 icon.headerSelected 选项重命名为 icon.activeHeader
此选项正在被重命名,以确保在手风琴(处理活动面板时为 active 与 selected)和整个 jQuery UI 套件中的一致性。

删除 activate 方法
activate 方法将被移除,取而代之的是更新 active 选项。包含 activate 方法不会简化手风琴的使用,因此没有必要。

将 resize 方法重命名为 refresh
此方法正在被重命名,以确保在整个 jQuery UI 套件中的一致性。但是,这将暂时继续仅处理大小更改。我们确实计划在将来支持添加/删除面板。

将 changestart 事件重命名为 beforeactivate
此事件正在被重命名,以确保在手风琴(处理活动面板时为 activate 与 change)和整个 jQuery UI 套件中的一致性。

将 change 事件重命名为 activate
此事件正在被重命名,以确保在手风琴(处理活动面板时为 activate 与 change)和整个 jQuery UI 套件中的一致性。

添加 .ui-accordion-heading 类
目前没有向每个面板的标题添加类。这会导致样式表使用 .ui-accordion-header a 来进行样式设置,这使得向标题添加额外的锚点变得很困难。为了解决这个问题,我们将在每个标题的第一个子元素中添加一个类,并使用这个新类来进行样式设置。

反馈

我们非常希望听到你对这些更改的反馈。我们希望确保在我们最终确定并实施这些更改之前,解决社区可能遇到的任何问题。如果您有任何反馈,请在 相关的论坛帖子 上发布。谢谢。

可扩展自动完成

发布于

在 jQuery UI 1.8 中发布 自动完成小部件 是 jQuery UI 团队一个相当重要的里程碑。如果你查看过这个小部件,你可能已经注意到,它只有 四个选项,远少于我们的其他插件。与我们选项最少的插件 进度条 不同,自动完成的小 API 并不是该插件本身简单的直接结果。实际上,自动完成相当复杂。

在设计自动完成小部件时,我们以 Jörn Zaefferer 的自动完成插件(有 21 个选项)为模型。诚然,Jörn 的插件比我们的插件提供了更多开箱即用的功能,但我们的小 API 具有相同的灵活性,并且具有易于学习和使用的额外优势。我们花费了大量时间、讨论和原型设计来将 21 个选项列表缩减为 4 个。

开箱即用,自动完成支持 本地数据源远程(JSON)数据源,只需向 source 选项提供一个数组或 URL。对 JSONPXML缓存 的支持都可以在几行代码中叠加。

还有一组由我托管的 扩展,为自动完成小部件提供了其他选项。 html 选项 (演示) 允许你指定标签应该被解释为 HTML 还是文本。还有 selectFirst 选项 (演示),它会在菜单显示时自动激活第一个项目,从而减少选择选项所需的按键次数。 autoSelect 选项 (演示) 允许用户输入有效的选项并离开该字段,而无需从菜单中选择该项目。如果用户输入的值有效,则将触发 select 事件,就像用户明确从菜单中选择该项目一样。我还有一个 重音折叠扩展 (演示),它使用户更容易选择带有重音字符的值。例如,如果有一个带有文本“Jörn”的项目,用户通常需要输入变音符才能看到该项目。但是,如果加载了重音折叠扩展,用户可以输入“Jorn”,他们仍然会看到结果。

更进一步,你可以使用自定义数据格式并定义自定义显示。例如,你可以 对结果进行分类显示其他信息,例如项目描述和图像。甚至还有一个 可扩展搜索结果 的示例(注意:这只是一个基于 Roman Chyla 的演示 的原型,它不是完整的。查看 论坛主题 了解更多详细信息)。你甚至可以支持 来自单个文本字段的多个单词

最后,还有组合框 演示,它将自动完成功能带到选择元素。组合框隐藏选择元素,而是显示一个文本字段供用户输入。可能的值是通过解析选择中的选项来确定的,用户可以通过单击文本字段旁边的按钮来查看所有选项。有关组合框工作原理的详细说明,请查看Jörn 在 Learning jQuery 上的文章