我有一个骨干集合。我想在集合中动态添加或删除一些模型。但是,如果我正在使用collection.set()方法,那么它将首先删除所有元素,然后它将再次添加所有元素。
我想要做的是为那些真正新添加的人触发添加集合事件,并为那些从之前集合中删除的人触发删除事件。
这是一个例子[http://jsfiddle.net/PkJCx/2/]
答案 0 :(得分:1)
来自文档
使用set方法对集合执行“智能”更新 通过了模型列表。如果列表中的模型尚未出现在 收集它将被添加;如果模型已经在集合中 它的属性将被合并;如果集合包含任何 列表中没有的模型,它们将被删除。
向模型提供“idAttribute”也是一个好主意,这样集合就可以根据id识别出来。否则,集合将不知道模型是否是新模型。
因此,在设置ID并使用set
后,您可以看到它执行智能更新
$(function () {
var MyModel = Backbone.Model.extend({
// This attribute should be set as a default
defaults: {
Name: ''
},
// Set the id attribute so that the collection
// know that it is the old model
idAttribute: 'id'
});
var Coll = Backbone.Collection.extend({
model: MyModel
});
var models = [{
Name: 'A',
id: 1
}, {
Name: 'B',
id: 2
}];
var collection = new Coll(models);
collection.bind('add', function (model) {
alert('addb')
});
collection.bind('remove', function () {
alert('add')
});
models = [{
Name: 'A',
id :1
}, {
Name: 'B',
id: 2
}, {
Name: 'C',
id: 3
}];
collection.add(models);
});
<强> Check Fiddle 强>
它不会尝试删除其他2,但Backbone足够聪明,可以识别其中2个是旧模型,然后将新模型合并到集合中。