骨干模型验证

And*_*rea 5 javascript validation model backbone.js

我在Backbone.js中遇到了模型验证的奇怪行为.

首次创建模型时,如

var foo = new Foo({
    bar: 42
});
Run Code Online (Sandbox Code Playgroud)

Backbone调用foo.set()传递作为给定地图的参数{bar: 42},正如从可以看到的那样.在这样做时,它也会传递选项{silent: true},就像在行中一样

this.set(attributes, {silent : true});
Run Code Online (Sandbox Code Playgroud)

这是有道理的,因为silent === true避免触发change事件,这在这种情况下没有意义.

但是出于某种原因,我无法理解,silent === true也会阻止验证 ; 看到线上的来源

if (!options.silent && this.validate && !this._performValidation(attrs, options)) return false;
Run Code Online (Sandbox Code Playgroud)

所以看起来模型在创建时从未经过验证,但它们通常是在某些属性发生变化时.此外,验证的存在与发送change事件的动作密不可分,这是完全正交的.

任何人都可以解释为什么会这样吗?什么是解决这个问题的清洁和面向未来的方法?

我可以手动调用_performValidation,但这有两个缺点:

  • 首先,这是我可以忘记的事情
  • 第二, _performValidation不是API的一部分,也许它将在未来的版本中发生变化.

Ati*_*nux 3

事实上,我认为这是 Backbone.JS 上的一个错误。

GitHub 上有一个未解决的问题:https ://github.com/documentcloud/backbone/issues/870

编辑:在新版本的 Backbone.js 0.9.1 中,您可以使用方法测试模型是否有效isValidhttp://backbonejs.org/#Model-isValid