基于集合侦听器运行方法的主干

Backbone running a method based on a collection listener

本文关键字:方法 运行 侦听器 于集合 集合      更新时间:2023-09-26

在我的应用程序中有以下代码,

initialize: function() {
    Pops.Collections.TeamCollection = this.collection;
    this.collection.fetch();
    this.collection.on('sync', this.render, this);
},
render: function() {
    this.addAll();
    return this;
},

不言自明,获取集合,一旦它与服务器同步,就运行渲染集合。在编写此代码序列时,这似乎是一个好主意,但是现在看起来,当我保存集合的模型时,它会运行同步侦听器并再次运行 render。这不是我想要的行为。我可以使用另一个侦听器来侦听初始提取是否完成?

根据骨干文档,

Backbone.sync 是 Backbone 每次尝试读取模型或将模型保存到服务器时调用的函数。

该事件本质上是与服务器通信的任何 CRUD 操作的"全部捕获",这就是在保存模型时触发它的原因。深入研究文档提供了有关.fetch()如何工作的线索

当模型数据从服务器返回时,它使用 set 来(智能地)合并获取的模型,除非您传递 {reset: true},在这种情况下,集合将被(有效)重置。

通过修改对 this.collection.fetch({reset: true}) 的调用,集合将加载数据并触发一个可以侦听而不是syncreset 事件。这将解决您的问题。