【发布时间】:2012-02-13 11:26:17
【问题描述】:
我在 Backbone.js 中遇到了模型验证的奇怪行为。
第一次创建模型时,例如
var foo = new Foo({
bar: 42
});
Backbone 调用foo.set() 作为参数传递给定的映射{bar: 42},从source 可以看出。在这样做时,它还传递了选项{silent: true},如行中的
this.set(attributes, {silent : true});
这是有道理的,因为拥有silent === true 可以避免触发change 事件,这在这种情况下没有意义。
不过,出于某种原因,我无法理解,silent === true 也阻止验证;在该行查看源代码
if (!options.silent && this.validate && !this._performValidation(attrs, options)) return false;
因此,模型在创建时似乎从不验证,但通常是在某些属性发生更改时验证。此外,验证的存在与发送change 事件的操作密不可分,这是完全正交的。
谁能解释为什么会这样?解决此问题的干净且面向未来的方法是什么?
我可以手动调用_performValidation,但这有两个缺点:
- 首先,我可以简单地忘记它
- 其次,
_performValidation不是 API 的一部分,它可能会在未来的版本中发生变化。
【问题讨论】:
标签: javascript validation model backbone.js