Javascript 主干-将2个集合合并在一起?
假设有两个集合,分别表示Javascript 主干-将2个集合合并在一起?,javascript,backbone.js,Javascript,Backbone.js,假设有两个集合,分别表示/api/page/1和/api/page/2;是否有任何方法(例如,通过下划线)将这两个集合合并成一个新的单个集合?在我看来,这样做会失去与/api/page/{1,2}/相关的语义 在我看来,无论是主干还是下划线,都不能为您提供一个函数/方法来完成您想要做的事情 因此,您的选择: 创建新集合,添加以前集合中的每个项目 将第一个集合项添加到第二个集合项 但你可能已经知道了 collection.add(models, [options]) 集合是一组模型 col
/api/page/1
和/api/page/2
;是否有任何方法(例如,通过下划线)将这两个集合合并成一个新的单个集合?在我看来,这样做会失去与/api/page/{1,2}/
相关的语义
在我看来,无论是主干还是下划线,都不能为您提供一个函数/方法来完成您想要做的事情
因此,您的选择:
- 创建新集合,添加以前集合中的每个项目李>
- 将第一个集合项添加到第二个集合项
collection.add(models, [options])
集合是一组模型
collection.models
collection1.add(collection2.models);
返回模型数组
collection.models
collection1.add(collection2.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..
选项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 : "..."}];
collection1.add(collection2.toJSON());
选项2
如果已获取集合并将其存储在两个变量中,则只需将第二个集合的所有内容添加到第一个集合中:
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 : "..."}];
collection1.add(collection2.toJSON());
此选项的问题是,当第二个集合添加到第一个集合时,第一个集合将触发“add”事件。如果这有副作用,例如由于此事件而重新呈现的不需要的UI,则可以通过添加{silent:true}标志来抑制它
collection1.add(collection2.toJSON(), {silent : true});
选项3
如果您只需要这些集合的JSON格式,即用于HTML模板呈现目的,您可以将所有内容简化为JS文本(数组、对象):
选项4=选项2+3
如果已经获取了这两个集合,则可以减少为JS文本,并将所有内容添加到新的主干集合中
var rawCollection = collection1.toJSON().concat(collection2.toJSON());
var newCollection = new Backbone.Collection(rawCollection);
Collection.models提供对MOEL数组的直接访问,Collection.add将使用模型数组作为参数。使用
collection.models
代替
collection.toJSON()
试试这个,
集合是一组模型
collection.models
collection1.add(collection2.models);
如果我们使用
collection1.add(collection2.toJSON());
然后参考chage是。我认为这里的解决方案是使用1个集合,然后
获取({data:{page:1},add:true})
。使用每个fetch()
增加页面值,并将最新的一批/页模型添加到集合中。您的解决方案看起来相当不错,但是我认为他已经获取了集合,并且可能希望避免重新读取数据。但是如果是这样的话,那么你的方法就是一个好方法。如果调用toJSON(),则会丢失对模型的引用。如果创建模型,将其插入集合,将集合与另一个集合合并,更改模型,则上一个集合中的模型不会更新。这将成为调试的噩梦。若您想复制模型并将它们分开,那个也没关系,但这不是标准,应该指出。若您已经有了这两个集合,您可能应该使用下面使用的任何答案:collection1.add(collection2.models)代码>虽然可能有效,但总体而言,答案是相当误导的。真实答案:collection1.add(collection2.models);如中所述:如果使用Collection.add,则可能需要{merge:true}选项。(见附件)。另外,默认情况下fetch会合并(但在我的旧版本0.9.10中,默认情况下它会重置,需要选项“update:true”才能合并-看看你的backbone.js集合“fetch”方法)。+1这是唯一的真实答案,应该是可以接受的答案。请参阅文档:。您还可以通过传递:{merge:true}来决定是否接受重复项