有没有办法轻松克隆Backbone Collection?我想知道为什么没有类似模型的方法构建.我的问题是我有一个模型,里面有一群孩子.当我克隆模型时.我仍然是孩子的集合,但只有他们的默认值.
chi*_*chi 60
最简单的方法:
var cloned = new Backbone.Collection(original.toJSON());
Run Code Online (Sandbox Code Playgroud)
original要克隆的集合在哪里.
总是可以随后扩展Backbone Collection以添加克隆支持w或w/o继承支持.
Pau*_*aul 14
您想要克隆集合的用例是什么?
集合没有内置克隆功能,因为您不希望克隆集合中的模型.克隆模型会导致同一模型有两个单独的实例,如果更新一个模型,另一个模型将不会更新.
如果要根据特定条件创建新集合,则可以使用集合的过滤方法.
var freshmenModels = studentsCollection.filter(function(student) {
return student.get('Year') === 'Freshman';
}
var freshmenCollection = new Backbone.Collection(freshmenModels);
Run Code Online (Sandbox Code Playgroud)
要继续并克隆集合中的模型,您可以编写以下代码
var clonedCollection = new Backbone.Collection();
studentsCollection.each(function(studentModel) {
clonedCollection.add(new Backbone.Model(studentModel.toJSON()));
});
Run Code Online (Sandbox Code Playgroud)
使用Backbone Collection clone()方法:
var clonedCollection = myCollection.clone();
Run Code Online (Sandbox Code Playgroud)
另一种选择,如果您需要以下内容(这是我发现这个问题时正在寻找的内容;)):
代码:
var models = original.map(function (model) { return model.clone(); });
var options = _.clone(original.options);
var copy = new original.constructor(models, options);
Run Code Online (Sandbox Code Playgroud)
Backbone.Collection 上的通用克隆方法会很尴尬,因为模型及其嵌套对象是通过引用复制还是自身被克隆,总是会有微妙之处。根据您的场景,要求会有很大差异,因此您需要编写所需的内容。
| 归档时间: |
|
| 查看次数: |
21019 次 |
| 最近记录: |