javascript - 更改事件在主干 View 中触发而不是重置

标签 javascript backbone.js backbone-views backbone-events backbone.js-collections

我正在尝试通过集合获取在 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/

相关文章:

javascript - 搜索输入框添加清除按钮

javascript - Backbone 模型验证

Django URL conf 和 Backbone.js 路由器

javascript - 如果有多个 View 依赖于它,何时销毁我的模型

javascript - 查询正在运行的父函数?

javascript - 将流程图另存为 PDF

javascript - 按结束年份和开始年份排序

javascript - 在 Backbone.js 中,我如何从一个 View 中调用另一个 View 中的函数?

jquery - 取消绑定(bind)滚动事件 - 推荐吗?

javascript - Google map 仅在 IE7 中无法加载 : 'Unexpected call to method or property access'