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
Backbone.js 如何克隆主干集合_Backbone.js - Fatal编程技术网

Backbone.js 如何克隆主干集合

Backbone.js 如何克隆主干集合,backbone.js,Backbone.js,有没有一种方法可以轻松克隆主干集合?我想知道为什么没有像模型那样的内置方法。我的问题是,我有一个模型,里面有一群孩子。当我克隆模型时。我仍然保留Child集合,但仅保留其默认值。您希望克隆该集合的用例是什么 集合没有内置的克隆功能,因为您不想克隆集合中的模型。克隆一个模型会导致同一个模型有两个单独的实例,如果更新一个模型,另一个将不会更新 如果要根据特定条件创建新集合,则可以使用集合的筛选方法 var freshmenModels = studentsCollection.filter(func

有没有一种方法可以轻松克隆主干集合?我想知道为什么没有像模型那样的内置方法。我的问题是,我有一个模型,里面有一群孩子。当我克隆模型时。我仍然保留Child集合,但仅保留其默认值。

您希望克隆该集合的用例是什么

集合没有内置的克隆功能,因为您不想克隆集合中的模型。克隆一个模型会导致同一个模型有两个单独的实例,如果更新一个模型,另一个将不会更新

如果要根据特定条件创建新集合,则可以使用集合的筛选方法

var freshmenModels = studentsCollection.filter(function(student) {
  return student.get('Year') === 'Freshman';
}

var freshmenCollection = new Backbone.Collection(freshmenModels);
要继续并克隆集合中的模型,可以编写以下代码

var clonedCollection = new Backbone.Collection();
studentsCollection.each(function(studentModel) {
  clonedCollection.add(new Backbone.Model(studentModel.toJSON()));
});

另一个选项,如果您需要以下内容(这就是我发现此问题时正在寻找的内容;):

  • 集合的副本应与原始集合的类型相同(例如,您创建了自己的集合类型,扩展了主干.collection)
  • 应使用与原始集合相同的选项创建集合的副本
  • 集合副本中的模型应使用model.clone()方法创建
代码:

主干集合上的通用克隆方法会很尴尬,因为模型及其嵌套对象是通过引用复制还是自身克隆总是有微妙之处。根据您的场景,需求会有很大的不同,所以留给您编写您需要的内容。

最简单的方法:

var cloned = new Backbone.Collection(original.toJSON());
其中,
original
是要克隆的集合

然后可以始终扩展主干网的
集合
,以添加克隆支持w或w/o继承支持。

使用以下方法:


但是我想复制集合中的所有单个模型。你想做什么来复制/克隆集合中的所有模型?我有一堆产品,可以有一个子产品列表。所以当一些人把它们放进篮子里时,我必须复制所有的子产品。用户可以更改产品本身和子产品的计数。因此,我需要一份原始集合的副本。@AndreasKöberle我更新了我的答案,以说明如何将模型克隆到新集合中。这个答案对我很有用,因为我通过在副本上取消一组不需要的属性来修改集合,但我不想影响原始集合。它克隆了集合的链接,因此,myCollection中的更改将跟随ClonedCollection中的更改这是一个很好的答案,因为它将执行深度克隆,这意味着它也将克隆模型。如果您更喜欢浅层克隆,其中新集合将指向相同的模型实例,那么请使用下面Craig Myles的答案。
var cloned = new Backbone.Collection(original.toJSON());
var clonedCollection = myCollection.clone();