有没有办法轻松克隆Backbone Collection?我想知道为什么没有类似模型的方法构建。我的问题是我有一个模型,里面有一群孩子。当我克隆模型时。我仍然是孩子的集合,但只有他们的默认值。
答案 0 :(得分:60)
最简单的方法:
var cloned = new Backbone.Collection(original.toJSON());
其中original
是要克隆的集合。
总是可以随后扩展Backbone的Collection
以添加克隆支持w或w / o继承支持。
答案 1 :(得分:14)
您想要克隆集合的用例是什么?
集合没有内置克隆功能,因为您不想克隆集合中的模型。克隆模型会导致同一模型有两个独立的实例,如果更新一个模型,另一个模型将不会更新。
如果要根据特定条件创建新集合,则可以使用集合的过滤方法。
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()));
});
答案 2 :(得分:8)
使用Backbone Collection clone()方法:
var clonedCollection = myCollection.clone();
答案 3 :(得分:4)
另一个选择,如果您需要以下(当我发现这个问题时,我正在寻找的那个;)):
代码:
var models = original.map(function (model) { return model.clone(); });
var options = _.clone(original.options);
var copy = new original.constructor(models, options);
Backbone.Collection上的通用克隆方法会很尴尬,因为模型及其嵌套对象是通过引用复制还是自己克隆,总会有细微之处。根据您的情况,要求会有很大差异,因此您可以根据自己的需要编写要求。