【问题标题】:Is there an event from Backbone.js Model fired when the Collection re-fetched重新获取集合时是否触发了来自 Backbone.js 模型的事件
【发布时间】:2012-11-07 16:50:29
【问题描述】:

我通过运行 collection.fetch() 方法初始化了一个主干集合,然后过了一会儿,我要求集合再次获取以刷新模型。那么,是否有任何来自 Model 的事件被触发,我可以从 View 订阅以删除/更新视图。

【问题讨论】:

    标签: backbone.js backbone.js-collections


    【解决方案1】:

    没有特定的“集合已被重新获取”事件,但您不需要。 fetch 重置集合:

    获取 collection.fetch([options])
    [...]
    当模型数据从服务器返回时,集合将重置

    reset 触发"reset" 事件:

    重置 collection.reset(models, [options])
    [...]
    使用 reset 将集合替换为新的模型列表(或属性哈希),最后触发单个 "reset" 事件。

    因此,只需从集合中侦听 "reset" 事件,并在收到时重新渲染视图。


    fetch 的行为在 Backbone 1.0 中发生了变化,从 ChangeLog:

    • 将 Collection 的“更新”重命名为 set,以便与类似的 model.set() 并行,并与 reset 进行对比。它现在是 fetch 之后的默认更新机制。如果您想继续使用“重置”,请传递{reset: true}

    如果我们查看set:

    设置 collection.set(models, [options])

    set 方法使用传递的模型列表对集合执行“智能”更新。如果列表中的模型尚未在集合中,它将被添加;如果模型已经在集合中,它的属性将被合并;如果集合包含列表中不存在的任何模型,它们将被删除。发生这种情况时会触发所有相应的 "add""remove""change" 事件。

    因此,如果您想继续使用"reset" 事件,可以说collection.fetch({ reset: true }),或者您可以collection.fetch() 并监听个别"add""remove""change" 事件。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多