如果我尝试在其中添加false,undefined或null -kind值,Backbone集合将如何表现?它们会触发什么事件?
答案 0 :(得分:1)
当通过添加/设置方法将模型添加到集合中时,它会通过传入的数组进行迭代,并且对于每个元素,它会尝试分配传递的元素或该元素的空对象:
源代码:
//Inside the set method of Backbone.Collection
for (i = 0, l = models.length; i < l; i++) {
attrs = models[i] || {};
// Called internally by set method for each new item passed.
_prepareModel: function(attrs, options) {
if (attrs instanceof Model) return attrs;
options = options ? _.clone(options) : {};
options.collection = this;
var model = new this.model(attrs, options);
if (!model.validationError) return model;
this.trigger('invalid', this, model.validationError, options);
return false;
}
因此,对于undefined,null和false,将创建一个空对象。
然后,set方法在内部为数组中传递的每个新项调用_prepareModel方法。这将创建骨干模型的新实例,传递传入项目的attrs对象,该对象将复制到模型中。由于attrs是空对象(对于null,undefined,false),在这种情况下不会添加新属性。
添加方法(http://backbonejs.org/#Collection-add):
为每个新元素引发添加事件。如果 {merge:true} 已通过,则会引发相应的更改事件。
设置方法(http://backbonejs.org/#Collection-set):
如果设置方法适当&#34;添加&#34;,&#34;删除&#34;,&#34;更改&#34;基于传入的数据触发事件。
对于给定的数据(undefined,null,false e.t.c),将触发add事件,因为每次将对象添加到集合时都会创建新对象。