如果将 "false"、"null" 或类似的东西添加到 backbone 集合中会发生什么

What happends if "false", "null" or something similar is added to backbone collection

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

当通过 add/set 方法将模型添加到集合时,它会遍历传入的数组,并尝试为每个元素分配传递的元素或该元素的空对象:

来自源代码:

//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 方法。这将创建一个 backbone 模型的新实例,传递传入项目的 attrs 对象,该对象被复制到模型中。由于 attrs 是空对象(对于 null、undefined、false),在这种情况下没有添加新属性。

添加方法 (http://backbonejs.org/#Collection-add) :

添加事件被引发 为每个新的 element.If {merge: true} 被传递,然后适当的 更改事件将被引发。

设置方法 (http://backbonejs.org/#Collection-set) :

如果设置方法适当"add"、"remove"和"change"事件被触发 基于传入的数据。

对于给定的数据(undefined,null,false e.t.c) add 事件将被触发,因为每次将其添加到集合中时都会创建新对象。