11

我的验证函数没有在下面的代码中被调用:-

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/

有人能告诉我为什么没有调用验证函数吗?

4

2 回答 2

33

在 Backbone.jsvalidate中自动调用 onsave但不是 on set

如果您希望在设置值时运行验证,则需要使用该validate选项。例如

car.set('color', 'muave', {validate: true});

请参阅http://backbonejs.org/#Model-validate

error尝试保存对象时,通常在服务器上发生错误时触发该事件。请参阅http://backbonejs.org/#Events-catalog

如果您想捕获验证失败,请尝试处理该invalid事件:

car.on('invalid', function (model, error) {
    console.log(error);
});
于 2013-01-21T19:10:40.710 回答
0

似乎需要编写一些额外的代码来运行验证。如下所示:

car.set('color', 'muave', {validate:true});
于 2014-04-07T13:16:00.070 回答