在 backbone 视图中触发更改事件而不是重置

Change event fired instead reset in backbone view

我正在尝试通过 cllection fetch 在视图中执行我的重置事件,但它不起作用...

路由器:

var tablesCollection = new TablesCollection();
var tablesView = new TablesView({ collection: tablesCollection});
tablesCollection.fetch({ reset: true });

我的看法:

initialize: function(){

  _.bindAll(this);
  this.collection.bind('reset',   this.render);
  this.collection.bind('add',     this.addTable);
  this.collection.bind('change',  this.changeTable);
  this.collection.bind('destroy', this.delTable);
},
render: function() {
  this.el.innerHTML = _.template( this.template, { data : _.groupBy( this.collection.toJSON(), 'status')} );
}

如果我在 fetch 中设置了 reset: true,Change 事件仍然会被触发。 我想通过重置事件呈现集合中的每个项目,然后通过更改事件只编辑一个。 感谢任何帮助

重置您的 collection 不会删除您的事件绑定。它只是从 collection 中删除 object。

如果另一个 view/server 事件再次开始填充您的 collection,那么您的视图仍处于绑定状态并且仍会触发事件。

首先我会使用 .on(backbone 事件系统)而不是 .bind

然后,如果您想解除视图与 collection 未来潜在更改的绑定,请使用 http://backbonejs.org/#Events-off

或者更好的是,如果你想破坏这个特定的视图(并且它仍在反应,也许那是你的问题)然后使用 http://backbonejs.org/#View-remove

它会自动解绑你所有的活动。

希望对你有帮助

编辑:

重置将始终触发 'change',因为它会更改 collection 的所有 object。您应该调整渲染函数以在 'change' 而不是 'reset'.

上触发