假设有 2 个 Collections,分别代表/api/page/1
和/api/page/2
;无论如何(例如通过下划线)将这两个集合合并到一个新的单一集合中?
6 回答
选项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);
试试这个,集合是模型数组
collection1.add(collection2.models);
如果我们使用
collection1.add(collection2.toJSON());
然后参考 chage
collection.add(models, [options])
集合是模型数组
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..
采用
collection.models
安装的
collection.toJSON()
在我看来,这样做会失去与/api/page/{1, 2}/
.
在我看来,无论是主干还是下划线,都没有为您提供完全符合您想要做的功能/方法。
所以你的选择:
- 创建一个新集合,添加以前集合中的每个项目;
- 将第一个集合项添加到第二个集合项
但您可能已经知道这一点。
Collection.models 提供对 moels 数组的直接访问,而 Collection.add 会将模型数组作为参数。