我的验证功能未在下面的代码中调用: -
var Vehicle = Backbone.Model.extend({
color: 'green',
validate: function (attrs) {
var validColors = ['white', 'red', 'blue', 'yellow'];
var colorIsValid = function (attrs) {
if (!attrs.color) return true;
return _.contains(validColors, attrs.color);
}
if(!colorIsValid(attrs)) {
return "color must be one of: " +validColors.join(",");
}
}
});
var car = new Vehicle();
car.on('error', function (model, error) {
console.log(error);
});
console.log(car.get('color'));
car.set('color', 'muave');
请看小提琴 http://jsfiddle.net/vineet85/Fa8jr/5/
有人可以告诉我为什么没有调用验证函数吗?
答案 0 :(得分:33)
在Backbone.js中,validate
会自动调用save
,而set
则不会调用validate
。
如果要在设置值时运行验证,则需要使用car.set('color', 'muave', {validate: true});
选项。 e.g。
error
请参阅http://backbonejs.org/#Model-validate
在尝试保存对象时,通常在服务器上发生错误时会触发invalid
事件。见http://backbonejs.org/#Events-catalog
如果您想捕获验证失败,请尝试处理car.on('invalid', function (model, error) {
console.log(error);
});
事件:
{{1}}
答案 1 :(得分:0)
似乎需要编写一些额外的代码来运行验证。 如下所示:
car.set('color', 'muave', {validate:true});