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