Проверка Backbone с помощью Backbone stickit - все атрибуты проверяются при их изменении
Я пытаюсь использовать Backbone Validation с Backbone Stickit, я хочу проверять один атрибут за раз, когда пользователь вводит их. Однако когда пользователь вводит значение, все атрибуты в модели проверяются, а не только те, которые были изменены пользователем. Что я делаю неправильно?
Мой взгляд:
bindings:{
'#username' : {
observe:'username',
setOptions: {
validate:true
}
},
'#email' : {
observe:'email',
setOptions: {
validate:true
}
},
'#firstname' : {
observe:'firstName',
setOptions: {
validate:true
}
},
.......
onShow: function(){
Backbone.Validation.bind(this, {
valid: function(view, attr) {
alert('VALID - ' + attr);
},
invalid: function(view, attr, error) {
alert('INVALID - ' + attr);
}
});
this.stickit();
},
4 ответа
Все, через что вы проходите setOptions
используется при установке значения в модели (1). Когда вы проходите validate: true
для функции set модели Backbone она проверит значения в модели, а также значения, переданные в функцию set (2), что означает, что она будет проверять всю модель каждый раз, когда вы устанавливаете новое значение, вызывая возникшую проблему сейчас. Вы не делаете ничего плохого.
Вероятно, вы могли бы решить эту проблему, разделив свою проверку на несколько отдельных функций и вызвав только необходимые функции при изменении атрибута, а затем изменив функцию validate для вызова всех этих отдельных функций для проверки всей модели.
Чтобы это работало, вы должны удалить значения по умолчанию (по крайней мере для атрибутов, которые вы проверяете) из вашей модели
Это случилось и со мной. В моем случае я устанавливал значения по умолчанию в модели как "" (пусто). Удалил их и все заработало
Попробуйте использовать backbone.validation
forceUpdate
параметр на вашем backbone.stickit
setOptions
объект в вашем вид привязки. Это сработало для меня, и у меня была такая же проблема.
Точно так же, как упомянуто yousefcisco, backbone будет проверять все атрибуты в модели при установке или сохранении, в зависимости от переданных вами параметров, но в моем случае это не то, что мне нужно было проверять каждый атрибут отдельно, но атрибуты не были установлены, даже если только один атрибут был недействительным, тогда я попробовал forceUpdate: true
и он сделал свое волшебство.
проверьте это здесь: http://thedersen.com/projects/backbone-validation/