Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干-将2个集合合并在一起?_Javascript_Backbone.js - Fatal编程技术网

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}来决定是否接受重复项