Проверка 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.validationforceUpdate параметр на вашем backbone.stickitsetOptions объект в вашем вид привязки. Это сработало для меня, и у меня была такая же проблема.

Точно так же, как упомянуто yousefcisco, backbone будет проверять все атрибуты в модели при установке или сохранении, в зависимости от переданных вами параметров, но в моем случае это не то, что мне нужно было проверять каждый атрибут отдельно, но атрибуты не были установлены, даже если только один атрибут был недействительным, тогда я попробовал forceUpdate: trueи он сделал свое волшебство.

проверьте это здесь: http://thedersen.com/projects/backbone-validation/

Другие вопросы по тегам