2013-12-09 63 views
1

我正在关注这些https://tutsplus.com/course/connected-to-the-backbone/讲座以学习骨干,并且在我知道validate()函数(如果存在)被调用时,只要我们在该模型内设置任何变量的值。我写了这个模式:骨干模型中的验证

var PersonModel = Backbone.Model.extend({ 

    defaults: { 
     name: 'Kamran Ahmed', 
     rollNo: '1224', 
     email: '[email protected]' 
    }, 

    validate: function (attrs){ 
     if (!attrs.name) { 
      return 'You must provide a name'; 
     } 
     if (attrs.rollNo < 0) { 
      return 'Roll Number must be positive'; 
     } 
    } 
}); 

,我试图如下:

var person = new PersonModel(); 
person.set('rollNo', -100) // trying to violate the validation rule 

但它从来没有验证即值-100仍然被分配到rollNo。此外,当我做person.set('rollNo', -100)时它会一直返回整个对象,而在违反验证规则时它应该返回false。我在这里做错了什么?为什么验证没有执行?

回答

1

从文档:

By default validate is called before save, but can also be called before set if 
{validate:true} is passed. 

所以你需要使用它喜欢:

person.set({'rollNo':-100},{validate:true}) 

您可以为Backbone.Modelvalidate读了。

附注: 看来教程是针对Backbone 0.9.2的,而当前版本是1.1.0。考虑找到最新的教程,或阅读Change Log