11

我可以理解需要一些抽象层来进行常见操作,例如检索 DOM 元素、属性操作等,但是 jQuery 是一个非常庞大的库,对于 Ember 来说似乎有点过头了。

查看源代码后,在 Ember 中使用 jQuery 的地方只有大约 30 次左右,看起来大部分 jQuery 使用都是简单的选择器调用、一些事件和一些 DOM 遍历。

Ember.$(rootElement).off('.ember', '**').removeClass('ember-application');

...

elem = this.$();

...

this.$().appendTo(target);

...

Ember.$(window).on('hashchange.ember-location-'+guid, function() {

等等

Ember 是否有任何其他原因要求每个应用程序都使用 jQuery?

可以将这几个用途嵌入到 Ember 中并将 jQuery 作为依赖项删除吗?

4

2 回答 2

23

Tom Dale(Ember Core 开发人员)对这个问题进行了非常好的解释

基本上他说:

Ember.js 需要 jQuery 有两个原因:

  • 我们在 Ember/Handlebars 集成中严重依赖它来插入和修改 DOM 元素。我个人对处理跨浏览器的 DOM 操作错误不感兴趣,但 jQuery 团队在这方面表现出色。
  • 通过在 jQuery 中拥有一个标准的 DOM 操作库,开发人员可以在不同的 Ember.js 应用程序之间移动,并依赖于他们拥有经过实战考验的跨平台库这一事实。

如果您担心大小,我建议您研究新的 jQuery 2.0,它能够进行自定义构建而没有动画等功能。

对我来说很有意义。

更新:

最近 Erik Bryn(也是 Ember 核心开发人员)写了一篇关于框架的非常有趣的评论,并提到了 Ember 项目中 jQuery 使用的最新状态。

粘贴评论:

Ember.js 是单体的,这是一个常见的误解。我可以向你保证,这实际上不是真的。您可以挑选您想要或需要的 Ember 部分(例如,路由器是完全可选的)。我们的构建工具甚至支持挑选您想要的包。你现在可以在没有 jQuery 的情况下使用它(你需要填充并拥有一个事件委托库,或者更容易使用超轻量级的自定义 jQuery 构建)。

于 2014-02-15T18:29:49.487 回答
17

只有 Ember 的视图层依赖于 jQuery。它在历史上比现在使用得更多。将来,我们可以按照您的建议将功能集成到 Ember 本身中,尽管我们不想在 Ember 中保持 jQuery 已经负责的跨浏览器兼容性。使用 jQuery 2.0 的另一条路径是创建仅包含 Ember 使用的部分的 jQuery 修剪器构建的方法。

如果有不折不扣的方法来替换 Ember 核心中的 jQuery 使用实例,您应该在 GitHub 上将这些更改作为问题提出。

于 2013-05-23T02:01:26.353 回答