Функция проверки подлинности магистрали не получает вызова

Моя функция проверки не вызывается в коде ниже: -

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/

Может кто-нибудь сказать мне, почему функция проверки не вызвана?

Ответ 1

В Backbone.js validate вызывается автоматически на save, но не на 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);
});

Ответ 2

Кажется, нужно написать дополнительный код для запуска проверки. как показано ниже:

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