骨干表行视图,只有一个eventlistener?

时间:2012-07-28 16:09:07

标签: javascript jquery backbone.js

基本上我想要的东西是我的HTML表的每一行都有一个Backbone视图,当我渲染我的表时,我可以很容易地实现这一点,我为每个tr实例化一个backbone.view,那就是“el”观点。

但是,这将导致每个tr都有一个eventlistener,效率不高。有没有办法完成同样的事情,即每个行视图的“el”是tr,但是所有事件都是从table元素委托的,因此只存在一个eventlistener?

也许有桌子的父视图并以某种方式委派所有事件,或者我真的不知道如何以一种好的方式解决这个问题,谢谢。

1 个答案:

答案 0 :(得分:3)

正常的做法是拥有TableView和多个RowView。 TableView将与Collection相关联,它将根据需要实例化RowView个迭代此集合。

如果Collection发生更改,TableView也会监听Collection中的更改以及创建和删除RowView实例。

RowView将收听集合中每个Model的更改。 通过与每个模型关联的活动DOM元素上的用户交互来监听

我没有看到任何问题。我认为这是最直观,可维护和优雅的结构。

如果你真的认为让TableView同时监听所有行中的事件会更好,那就试试这个:

var TableView = Backbone.View.extend({
  events: {
    "click tr a.remove", "remove"
  },

  remove: function( event ){
    console.log( "row-id", $(event.target).attr( "data-row-id" ) );
  }
});

请确保TableView中的每个row都可以通过示例中的任何特殊属性data-row-id来识别..但是他们必须转到Collection,搜索具体的Model和act,直接在RowView中使用此事件时,您可以直接访问模型,一切都更自然。

实际上我并不认为你会获得更好的表现,我认为发达的jQuery会创造相同数量的事件监听器。