如果将“false”,“null”或类似内容添加到主干集合中会发生什么

时间:2015-03-23 08:46:26

标签: backbone.js backbone-collections

如果我尝试在其中添加false,undefined或null -kind值,Backbone集合将如何表现?它们会触发什么事件?

1 个答案:

答案 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事件,因为每次将对象添加到集合时都会创建新对象。