我必须做一些愚蠢的事情,或者可能缺少Backbone文档的一些关键部分,但我不明白为什么Model.validate函数在以这种方式初始化一个新集合时触发:http://jsfiddle.net/5a3k/QSeH6/ ..我出错了什么想法?
编辑:更改标题
答案 0 :(得分:4)
执行此行:
var myCollection = new Collection([{id: 'smith'}]);
使用一个模型创建新集合。在构造函数中传递的所有模型都将添加到集合中。每个添加的模型都经过验证。
详细说明:
this.reset()
(source)。.reset()
会默默地将所有模型添加到集合中(source)。.add()
会为每个模型调用内部._add()
(source)。._add()
会调用.prepareModel
来检查模型是否有效(source)。更新(基于问题中的修改):
仅当模型不是model.validate
(source)的实例时,才会执行 Backbone.Model
。
因此,如果您使用
创建集合var myCollection = new Collection([{id: 'smith'}]);
然后该模型是Object
的实例。但是如果你使用:
var myCollection = new Collection([ new Model({id: 'smith'}) ]);
然后模型是Backbone.Model
的实例,并跳过验证。