Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
backbone.js收集事件_Backbone.js - Fatal编程技术网

backbone.js收集事件

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表的某一行时,该组件将被调用。在这个组件

我开发了一个jquery&backbone.js web应用程序。
一个组件有一个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);