我试图通过抓取来执行我的重置事件,但它不起作用...
路由器:
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')} );
}
如果我已重置,则仍会触发Change事件:fetch中为true。
我想通过重置事件然后通过刚刚编辑的更改事件来呈现集合中的每个项目。
感谢您的帮助
最佳答案
重置集合不会删除事件绑定。只是从集合中删除对象。
如果另一个视图/服务器事件再次开始填充您的集合,则您的视图仍将被绑定并仍然触发事件。
首先,我将使用.on(主干事件系统)代替.bind
然后,如果您想将视图与集合解除绑定,则可以使用将来的潜在更改
http://backbonejs.org/#Events-off
或者更好的是,如果您想破坏这个特定的视图(并且它仍然在做出反应,也许这就是您的问题),请使用
http://backbonejs.org/#View-remove
它将自动取消绑定所有事件。
希望对您有所帮助
编辑:
重置将始终触发“更改”,因为它会更改集合中的所有对象。您应该调整渲染功能,使其在“更改”而不是“重置”时触发。