我通过运行 collection.fetch() 方法初始化了一个主干集合,然后过了一会儿,我要求集合再次获取以刷新模型。那么,是否有任何来自 Model 的事件被触发,我可以从 View 订阅以删除/更新视图。
1 回答
没有特定的“集合已重新获取”事件,但您不需要。fetch
重置集合:
fetch
collection.fetch([options])
[...]
当模型数据从服务器返回时,集合将重置。
并reset
触发一个"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"
事件。
因此,您可以说collection.fetch({ reset: true })
是否要继续使用该"reset"
事件,或者您可以collection.fetch()
监听单个"add"
、"remove"
和"change"
事件。