我正在尝试设计一种加载更多类型的系统,每次按加载更多时,都会将数据添加到现有集合中。这是UI外观的粗略草图。
除了每次我重新运行之外,一切都很好
items.fetch
它的作用:它用新数据覆盖整个集合
我想让它做什么:我希望返回的新记录添加到记录集合中,而不是覆盖旧的"记录"
我如何使这项工作能够使新提取的记录附加到现有记录而不被覆盖?
将{ remove: false }
添加到您的fetch
调用:
items.fetch({ remove: false, data: { nextId: this.info.get('nextId') } });
这里发生的事情是Collection#fetch
将其模型与服务器返回的数据同步。这包括添加新模型、更新现有模型以及删除响应中未包含的模型。
fetch的行为可以通过使用可用的集合选项进行自定义。例如,要获取集合,请为每个新模型获取一个"添加"事件,为每个已更改的现有模型获得一个"更改"事件,而不删除任何内容:collection.fetch({remove:false})
可用的set
选项有add
、remove
和merge
。将一个(或全部)设置为false
将禁用fetch
中的该功能。
听起来您只需要{ remove: false }
,而不需要add
和merge
功能。
我不熟悉主干关系,
但对于普通的集合,您可以在解析方法中执行以下操作:
Backbone.Collection.extend({
parse: function(response){
// you can update the info here like this.info = response.info or similar
return _.union(this.toJSON(), response.records);
}
});
基本上,我们将响应与现有数据组合并返回,以便在集合更新时维护以前的数据