了解Backbone Model集,验证和更改回调

wca*_*rao 5 backbone.js

Backbone文档说:

如果验证失败,Model.set将失败 - 它不会设置值,因此它不会触发任何回调.我们可以将{silent:true}传递给Model.set - 然后它将设置值但不会触发任何回调.

所以,

为什么Backbone Model需要有效状态才能简单地设置属性值?如果我们想在用户与UI交互时设置属性,但模型无效,该怎么办?这意味着更改回调不可用,除非我们通过{silent:true}然后手动触发更改?!

请说你知道更好的处理方式:)

And*_*bbs 3

我不确定如何回答“为什么”问题,但您可以说,对于为什么 set 运行验证是好的,有一些争论。例如,它使实时进行客户端验证变得非常简单。

如果您的问题可以通过仅验证用户当前正在更改的值来解决,那么您可以通过将您的validate方法与该hasChanged方法相结合来做到这一点。

例如这样的事情:

Backbone.Model.extend({
  defaults : { name : "" },

  validate : function (attrs) {
    var errors = {};
    if(this.hasChanged("name") && attr.name.length == 0) {
      errors.name = "Need a name yo!";
    }
    //...

    if(_.keys(errors).length > 0) {
      return errors;
    }
  }
})
Run Code Online (Sandbox Code Playgroud)