我试图使用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()
是一个underscore.js函数,对吗?它是否支持传递属性来检查其有效性?我在这里缺少什么?
答案 0 :(得分:1)
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
调用返回真值。
答案 1 :(得分:0)
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});