Функция проверки подлинности магистрали не получает вызова
Моя функция проверки не вызывается в коде ниже: -
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});