触发Backbone.js子视图中的事件

时间:2011-11-15 04:49:59

标签: jquery backbone.js

我有一个包含表格的视图。

var newsIndexView = Backbone.View.extend({
   ...
});

表中的每一行都是与模型关联的另一个视图。

var newsItemView = Backbone.View.extend({
  tagName: "tr",
  ...
  selectRow: function(e){
    this.selected = !this.selected;
    $(this.el).toggleClass("selected");
    if(this.selected){
      $(".delete_many").on("click", $.proxy(this.remove, this));
    }else{
      $(".delete_many").off("click", $.proxy(this.remove, this));
    }
  },

  ...

});

用户可以选择行。选择1行或更多行时,将显示删除按钮。当选择按钮(.delete_many)时,我想为每个选定的newsItemView触发删除事件。正如您所看到的那样,当我选择一行时,我正在为它添加一个事件处理程序,并在取消选择它时将其删除。我想知道是否有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

您是否无法在管理表的视图上使用delegateEvents来安装点击处理程序一次?它应该触发,即使稍后添加按钮(即使稍后删除按钮也会保持不变)。

var newsIndexView = Backbone.View.extend({
 events: {
  "click .deleteMany"  : "deleteMany"
 },
 ...

然后deleteMany函数将确定选择哪些行并在循环中删除它们。由于按钮属于整个表格(而不属于单个行),因此这似乎更自然。它还可以很容易地拥有一个“你确定”的确认对话框(你想只弹出一次而不是每一行),并使用服务器后端的批量删除功能(每行一个请求而不是一个)。