我试图设计一种更多类型的系统,每次按下加载时,您都会将数据添加到现有集合中。这是UI外观的粗略草图。
除非你每次重新运行
,否则一切都会非常好items.fetch
它的作用:它使用新数据覆盖整个集合
我想要它做什么:我希望将返回的新记录添加到记录集合中,而不是覆盖旧的'记录'
如何使这项工作能够将新获取的记录附加到现有记录中而不会覆盖?
答案 0 :(得分:3)
将{ remove: false }
添加到fetch
来电:
items.fetch({ remove: false, data: { nextId: this.info.get('nextId') } });
这里发生的是Collection#fetch
将其模型与服务器返回的数据同步。这包括添加新模型,更新已存在的模型以及删除未包含在响应中的模型。
可以使用可用的set选项自定义提取行为。例如,要获取集合,为每个新模型获取“添加”事件,并为每个更改的现有模型获取“更改”事件,而不删除任何内容:collection.fetch({remove:false})
可用的set
选项包括add
,remove
和merge
。将一个(或全部)设置为false
将禁用fetch
中的该功能。
听起来你只想要{ remove: false }
,留下add
和merge
功能。
答案 1 :(得分:1)
我不熟悉backbone-relational,
但是使用普通集合,您可以在解析方法中执行以下操作:
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);
}
});
基本上我们将响应与现有数据相结合并返回它,以便我们在集合更新时维护以前的数据