backbone-js:我怎样才能默默地初始化一个新的Collection?

时间:2012-01-06 00:11:22

标签: javascript backbone.js

我必须做一些愚蠢的事情,或者可能缺少Backbone文档的一些关键部分,但我不明白为什么Model.validate函数在以这种方式初始化一个新集合时触发:http://jsfiddle.net/5a3k/QSeH6/ ..我出错了什么想法?

编辑:更改标题

1 个答案:

答案 0 :(得分:4)

执行此行:

var myCollection = new Collection([{id: 'smith'}]);

使用一个模型创建新集合。在构造函数中传递的所有模型都将添加到集合中。每个添加的模型都经过验证。

详细说明:

  1. Backbone.Collection构造函数正在调用this.reset()source)。
  2. .reset()会默默地将所有模型添加到集合中(source)。
  3. .add()会为每个模型调用内部._add()source)。
  4. 内部._add()会调用.prepareModel来检查模型是否有效(source)。
  5. 更新(基于问题中的修改):

    仅当模型不是model.validatesource)的实例时,才会执行

    Backbone.Model

    因此,如果您使用

    创建集合
    var myCollection = new Collection([{id: 'smith'}]);
    

    然后该模型是Object的实例。但是如果你使用:

    var myCollection = new Collection([ new Model({id: 'smith'}) ]);
    

    然后模型是Backbone.Model的实例,并跳过验证。