>我试图使用isValid
方法检查各个属性的有效性。对于无效属性,它返回 true。我的代码如下:
person = Backbone.Model.extend({
defaults:{
name:"default name",
age:0
},
initialize:function(){
this.on("invalid",function(model,errors){
console.log(JSON.stringify(errors));
});
},
validate:function(attrs){
errors=[];
if(attrs.age<0){
errors.push({attribName:"age",errorMsg:"age should be grater than 0"});
}
return errors.length>0?errors:false;
}
});
var person1 = new person();
person1.set({
age:-5
});
console.log("checking validity of model:"+person1.isValid());
console.log("checking for validity of age attribute:"+person1.isValid('age'));
如果用于检查整个模型的有效性,isValid()
工作正常,并返回 false。但是当我尝试检查 age 属性时,即isValid('age')
它应该返回 false 时返回 true。
isValid()
是下划线.js函数,对吧?它不支持传递属性来检查其有效性吗?我在这里错过了什么?
简短版本
Model.isValid
不接受属性名称作为参数,必须在整个模型上使用。如果你不这样做,你就在无证的领域,你会得到奇怪的行为。
要检查各个属性,您必须设置自己的机制。
长版本,为什么你会得到不同的值
Model.isValid
实际上接受(未记录的)选项哈希作为其第一个参数,并在内部将此哈希转发给Model._validate
this._validate({}, _.extend(options || {}, { validate: true }))
尝试将validate
属性设置为 true。但此时,options
是一个字符串,不会被_.extend
修改。_validate看起来像
_validate: function(attrs, options) {
if (!options.validate || !this.validate) return true;
// ...
}
检查它是否确实必须验证模型,options.validate
未定义,并且您的isValid
调用将返回一个 true 值。
isValid是一个主干API:http://backbonejs.org/#Model-isValid
它返回 true 的原因是,isValid 接受的参数是一个选项参数。它必须是一个对象。
您使用的选项之一是:
validate: function(attrs, options) {
if(options.someSpecialCheck) {
// Perform some special checks here
} else {
// Perform some regular checks here
}
}
myModel.isValid({someSpecialCheck: true});