如何克隆骨干集合
有没有办法轻松克隆骨干收集? 我想知道为什么没有像模型的方法build立。 我的问题是我有一个模型拿着孩子的集合。 当我克隆模型。 我仍然收集孩子,但只有他们的默认值。
你想要克隆这个集合的用例是什么?
对于集合,没有内置的克隆function,因为您不想在集合中克隆模型。 克隆一个模型会导致同一个模型有两个独立的实例,如果你更新了一个模型,另一个将不会被更新。
如果你想创build一个基于特定标准的新集合,那么你可以使用集合的过滤方法。
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())); });
最简单的方法:
var cloned = new Backbone.Collection(original.toJSON());
original
是克隆的集合。
总是可以扩展Backbone的Collection
来添加克隆支持w或w / oinheritance支持。
使用Backbone Collection clone()方法:
var clonedCollection = myCollection.clone();
另一个select,如果你需要以下(这是我发现这个问题时,我正在寻找;)):
- 集合的副本应该与原始集合的types相同(例如,您已经创build了自己的集合types来扩展Backbone.Collection)
- 集合的副本应该使用与原始选项相同的选项创build
- 应该使用model.clone()方法创build集合副本中的模型
码:
var models = original.map(function (model) { return model.clone(); }); var options = _.clone(original.options); var copy = new original.constructor(models, options);
Backbone.Collection上的通用克隆方法会很棘手,因为模型及其嵌套对象是否通过引用被复制或者自身被复制,总是会有微妙的变化。 根据你的情况,需求会有很大的不同,所以你只需要写下你所需要的东西。