我正在尝试通过集合获取在 View 中执行重置事件,但它不起作用...
路由器:
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 中重置了:true,则更改事件仍然会被触发。 我想通过重置事件然后通过刚刚编辑的更改事件渲染集合中的每一项。 感谢您的帮助
最佳答案
重置您的集合不会删除您的事件绑定(bind)。它只是从集合中删除对象。
如果另一个 View /服务器事件开始再次填充您的集合,那么您的 View 仍然绑定(bind)并且仍然触发事件。
首先,我会使用 .on (主干事件系统)而不是 .bind
然后,如果您想从集合中解除 View 的绑定(bind),则 future 可能发生的更改请使用 http://backbonejs.org/#Events-off
或者更好,如果你想破坏这个特定的 View (它仍然在 react ,也许这就是你的问题),那么使用 http://backbonejs.org/#View-remove
它将自动取消绑定(bind)您的所有事件。
希望对你有帮助
编辑:
重置将始终触发“更改”,因为它会更改集合中的所有对象。您应该调整渲染函数以在“更改”而不是“重置”时触发。
关于javascript - 更改事件在主干 View 中触发而不是重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30426591/