如何克隆骨干集合

有没有办法轻松克隆骨干收集? 我想知道为什么没有像模型的方法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上的通用克隆方法会很棘手,因为模型及其嵌套对象是否通过引用被复制或者自身被复制,总是会有微妙的变化。 根据你的情况,需求会有很大的不同,所以你只需要写下你所需要的东西。