我通过运行 collection.fetch() 方法初始化了一个主干集合,然后过了一会儿,我要求集合再次获取以刷新模型。那么,是否有任何来自 Model 的事件被触发,我可以从 View 订阅以删除/更新视图。
1 回答
没有特定的“集合已重新获取”事件,但您不需要。fetch重置集合:
fetch
collection.fetch([options])
[...]
当模型数据从服务器返回时,集合将重置。
并reset触发一个"reset"事件:
reset
collection.reset(models, [options])
[...]
使用reset将集合替换为新的模型列表(或属性哈希),"reset"最后触发单个事件。
因此,只需侦听"reset"集合中的事件并在获得事件时重新渲染视图。
fetchBackbone 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"事件。