2

假设我们有以下 DOM 元素:

<ul>
  <li>foo</li>
  <li>bar</li>
  <li>baz</li>
</ul>

从一开始我们都知道这种方法不是最优的:

$('li').on('click', function() {…});

相反,我们倾向于这样写:

$('ul').on('click', 'li', function() {…});

但是余烬呢?在 Ember 中,视图表示单个DOM 元素。如果我要写这个:

<ul>
  {{#each people}}
    {{#view App.PersonEntryView}}{{name}}{{/view}}
  {{/each}}
</ul>

并且PersonEntryView实现了点击处理程序,我们最终会得到第一个 jQuery 示例,或者是吗?

我倾向于争取最好的解决方案,所以我很好奇所谓的 Ember 事件委托方式是什么?

UL我应该仅仅为了授权而创建一个视图吗?我可以,但是应用程序中有多个列表呢?

那么,你们怎么处理呢,伙计们?

4

1 回答 1

3

如果我要编写 .... 并且 PersonEntryView 实现了点击处理程序,我们最终会得到第一个 jQuery 示例,或者是吗?

不完全是。Ember 使用 jQuery 将所有事件委托给根元素。当事件发生时,它会找到最近的具有处理程序的视图。因此,当您在 PersonEntryView 上定义 click() 处理程序时,您将获得第一个示例的易于开发和第二个示例的性能。

我倾向于争取最好的解决方案,所以我很好奇所谓的 Ember 事件委托方式是什么?

这方面的文档非常好,查看 事件委托事件冒泡指南

我是否应该仅仅为了授权而为 UL 创建一个视图?我可以,但是应用程序中有多个列表呢?

没有。只需在您的列表元素上定义一个点击处理程序,例如:

App.PersonEntryView = Ember.View.extend({
  click: function(event) {
    //handle event here
  }
});
于 2013-05-25T22:14:42.890 回答