backbone.js收集事件
我开发了一个jquery&backbone.js web应用程序。backbone.js收集事件,backbone.js,Backbone.js,我开发了一个jquery&backbone.js web应用程序。 一个组件有一个html表,该表后面是一个backbone.js集合。 这个集合中的任何更改都会导致html表的更新,所以我写 this.collection.bind("reset add remove", this.renderRows, this); 因此,当整个集合变得新时,当添加新模型时,当移除模型时,我更新html表 还有一个细节视图组件,当用户将鼠标悬停并单击html表的某一行时,该组件将被调用。在这个组件
一个组件有一个html表,该表后面是一个backbone.js集合。
这个集合中的任何更改都会导致html表的更新,所以我写
this.collection.bind("reset add remove", this.renderRows, this);
因此,当整个集合变得新时,当添加新模型时,当移除模型时,我更新html表
还有一个细节视图组件,当用户将鼠标悬停并单击html表的某一行时,该组件将被调用。在这个组件的开头,我从集合中得到了正确的模型
changeModel = this.collection.get(id);
在用户更改了一些属性之后,我会这样做
changeModel.set(attrs);
然后返回html表。集合中的模型具有正确的更改值
但是html表没有更新,因为3个事件(重置、添加、删除)都没有触发
所以我在集合绑定中添加了“replace”
this.collection.bind("replace reset add remove", this.renderRows, this);
在从细节视图返回之前,我打电话给
this.collection.trigger("replace");
我的解决方案可行,但我的问题是:
是否有任何“本机”backbone.js解决方案已经存在,但我错过了,并且我不必自己触发某些东西?从模型到集合的
更改事件不断涌现。(集合的\u onModelEvent
-函数在中。该方法基本上只从模型中获取所有事件,并在集合中触发它们
这导致了
已设置模型属性
模型触发器change
收集捕获更改
收集触发器change
所以
必须用这个来代替
this.collection.bind("change reset add remove", this.renderRows, this);
希望这有帮助
附言
我个人的观点是,如果只更改了一个模型,则不应重新绘制整个表。相反,应使每个表行本身具有一个视图,该视图将相应的模型作为其模型,然后对其中的属性更改作出反应。如果只针对一个表单元格,则重新绘制500个表单元格是没有意义的
更新
现在,您应该使用
-上的方法来绑定事件
collection.on("change reset add remove", this.renderRows, this);
如果您使用的是BB 1.0,并且此事件正在视图中收听,我建议您使用新的绑定到事件中,这也允许在调用视图时轻松解除绑定。remove()
。在这种情况下,您应该执行以下操作:
// assuming this is the view
this.listenTo(collection, "change reset add remove", this.renderRows);
谢谢。我想你应该在原始答案之前说“主干网自从我第一次写这篇文章以来增加了一些便利,如果你正在使用任何最新的主干网,请参阅下面的更新。”大约20行看起来答案接近我们中一些人的注意力范围。再次感谢,很有帮助。同意“更新”应该在顶部,但是那些都是格式非常好的20行解释和代码,我通读它没有问题。
// assuming this is the view
this.listenTo(collection, "change reset add remove", this.renderRows);