假设有2个集合,分别代表/api/page/1
和/api/page/2
;无论如何(通过Underscore)将这两个集合合并为一个新的单一集合?
答案 0 :(得分:49)
选项1
如果你还没有提取集合,你可以获取第一个,然后使用{add:true}标志获取第二个,第二个将合并到第一个:
collection.fetch({data : {page : 2});
=> [{id: 1, article : "..."}, {id: 2, article : "..."}];
collection.fetch({data : {page : 2}, add : true });
=> [{id: 1, article : "..."}, {id: 2, article : "..."}, {id: 3, article : "..."}];
选项2
如果您已经提取了集合并将它们存储在两个变量中,您只需将第二个集合的所有内容添加到第一个集合中:
collection1.add(collection2.toJSON());
这个选项会受到以下事实的影响:第一个集合将在添加第二个集合时触发“add”事件。如果这有副作用,例如由于此事件而重新呈现的不需要的UI,则可以通过添加{silent:true}标志来抑制它
collection1.add(collection2.toJSON(), {silent : true});
选项3
如果您只需要这些集合的JSON格式,即出于HTML模板呈现的目的,您可以将所有内容减少为JS文字(数组,对象):
collection1.toJSON().concat(collection2.toJSON());
=> [{id: 1, article : "..."}, {id: 2, article : "..."}, ...];
选项4 =选项2 + 3
如果你已经提取了两个集合,你可以减少到JS文字并将所有内容添加到一个新的Backbone集合
var rawCollection = collection1.toJSON().concat(collection2.toJSON());
var newCollection = new Backbone.Collection(rawCollection);
答案 1 :(得分:5)
collection.add(models, [options])
Collection是模型数组
collection.models
返回模型数组
将一个模型(或一组模型)添加到集合中。
A = Backbone.Collection;
collection1 = new A([
{key, 'value'}, //model1
{key : value1} //model2 in collection1
]);
B = Backbone.Collection;
collection2 = new B([
{key1, 'value'}, //model1
{key1 : value1} //model2 in collection2
]);
collection1.add(collection2.models); //now, collection1 has four models..
答案 2 :(得分:5)
使用
collection.models
而不是
collection.toJSON()
答案 3 :(得分:0)
在我看来,通过这样做,你失去了与/api/page/{1, 2}/
绑定的语义。
在我看来,无论是主干,还是下划线,都没有为您提供完全符合您要求的功能/方法。
所以你的选择:
但你可能已经知道了这一点。
答案 4 :(得分:0)
Collection.models提供对moels数组的直接访问,而Collection.add将采用一组模型作为参数。