Backbone.js 主干验证函数未被调用
下面的代码中没有调用我的验证函数:-Backbone.js 主干验证函数未被调用,backbone.js,Backbone.js,下面的代码中没有调用我的验证函数:- var Vehicle = Backbone.Model.extend({ color: 'green', validate: function (attrs) { var validColors = ['white', 'red', 'blue', 'yellow']; var colorIsValid = function (attrs) { if (!attrs.color) re
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');
请看小提琴
有人能告诉我为什么没有调用validate函数吗?在Backbone.js中
validate
在保存时自动调用,但在设置时不自动调用
如果要在设置值时运行验证,则需要使用validate
选项。e、 g
car.set('color', 'muave', {validate: true});
看
当尝试保存对象时,通常在服务器上发生错误时,会触发error
事件。看
如果要捕获验证失败,请尝试处理无效
事件:
car.on('invalid', function (model, error) {
console.log(error);
});
似乎需要编写一些额外的代码来运行验证。
如下图所示:
car.set('color', 'muave', {validate:true});
你期望发生什么?我认为现在可以调用您的验证方法。如果您想知道为什么没有向控制台写入错误,是因为没有触发错误事件。请参阅更新的答案。@Vinet,您说您的小提琴仍然不工作,是不是意味着错误消息(“颜色必须是:白色、红色、蓝色、黄色之一”)没有打印在控制台日志上?我注意到,在你的小提琴中,你仍然使用事件错误,而不是史蒂夫的答案中的无效。