gpt4 book ai didi

主干.js 收集事件

转载 作者:行者123 更新时间:2023-12-03 14:32:08 27 4
gpt4 key购买 nike

我开发了一个 jquery &backbone.js 网络应用程序。
一个组件有一个 html 表,该表后面是一个主干.js 集合。
此集合中的任何更改都应该导致 html 表的更新,所以我写

this.collection.bind("reset add remove", this.renderRows, this);    

所以我更新了 html 表,当整个集合变得新时,当一个新模型被添加时,当一个模型被删除时。

当用户悬停并单击 html 表的某一行时,还会调用一个详细 View 组件。在这个组件的开头,我从集合中得到了正确的模型
changeModel = this.collection.get(id);

在用户改变了一些属性之后,我做
changeModel.set(attrs); 

并返回到 html 表。集合中的模型具有正确的更改值。

但是 html 表没有更新,因为没有触发 3 个事件(重置、添加、删除)。

所以我在集合绑定(bind)中添加了“替换”
this.collection.bind("replace reset add remove", this.renderRows, this);

在从详细 View 返回之前,我调用了
this.collection.trigger("replace");

我的解决方案有效,但我的问题是:

是否有任何“ native ”backbone.js 解决方案已经存在并且我错过了并且我不必自己触发某些东西?

最佳答案

change模型中的事件冒泡到集合中。 (集合的 _onModelEvent -函数在 annotated source 中。该方法基本上只是从模型中获取所有事件并在集合上触发它们。
这将导致

  • 模型属性设置
  • 模型触发器 change
  • 收藏夹 change
  • 收集触发器 change

  • 所以
    this.collection.bind("replace reset add remove", this.renderRows, this); 
    必须用这个替换
    this.collection.bind("change reset add remove", this.renderRows, this);
    附言
    我个人的看法是,如果只更改一个模型,您不应该重绘整个表格。而是使每个表行本身成为一个 View ,该 View 具有相应的模型作为其模型,然后对那里的属性更改使用react。如果您只针对一个,那么重新绘制 500 个表格单元格是没有意义的。
    更新
    现在你应该使用 on - 绑定(bind)到事件的方法。
    collection.on("change reset add remove", this.renderRows, this);
    如果您使用的是 BB 1.0,并且在 View 中监听此事件,我建议改用新的 listenTo 绑定(bind)到事件中,这也允许在调用 view.remove() 时轻松解除绑定(bind).在这种情况下,您应该这样做:
    // assuming this is the view
    this.listenTo(collection, "change reset add remove", this.renderRows);

    关于主干.js 收集事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12279236/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com