Показать сообщение отдельно
  #1 (permalink)  
Старый 29.05.2016, 15:36
Кандидат Javascript-наук
Отправить личное сообщение для zlodiak Посмотреть профиль Найти все сообщения от zlodiak
 
Регистрация: 24.02.2012
Сообщений: 104

backbone-validate не срабатывает
помогите пожалуйста понять почему backbone-validate отказывается валидировать форму

я сделал следующее:
в форме имеется набор полей. правила валидации прописаны в модели:
APP.PlaceModel = Backbone.Model.extend({

  defaults: {
    idPlace: undefined,
    length: undefined,
    width: undefined,
    height: undefined,
    volume: undefined,
    weight: undefined,
    overCargo: undefined,
    hardBox: undefined         
  }, 

  validation: {

    length: [ 
              { required: true, msg: 'Поле не может быть пустым' },
              { pattern: 'number', msg: 'Введите число' },
              { pattern: /^[0-9]\d*(\.\d+)?$/, msg: 'Введите положительное число' },
              { pattern: /^[1-9]\d*(\.\d+)?$/, msg: 'Число не может быть нулём' }
            ],     

    width:  [ 
              { required: true, msg: 'Поле не может быть пустым' },
              { pattern: 'number', msg: 'Введите число' },
              { pattern: /^[0-9]\d*(\.\d+)?$/, msg: 'Введите положительное число' },
              { pattern: /^[1-9]\d*(\.\d+)?$/, msg: 'Число не может быть нулём' }
            ],    

    height: [ 
              { required: true, msg: 'Поле не может быть пустым' },
              { pattern: 'number', msg: 'Введите число' },
              { pattern: /^[0-9]\d*(\.\d+)?$/, msg: 'Введите положительное число' },
              { pattern: /^[1-9]\d*(\.\d+)?$/, msg: 'Число не может быть нулём' }
            ],    

    volume: [ 
              { required: true, msg: 'Поле не может быть пустым' },
              { pattern: 'number', msg: 'Введите число' },
              { pattern: /^[0-9]\d*(\.\d+)?$/, msg: 'Введите положительное число' },
              { pattern: /^[1-9]\d*(\.\d+)?$/, msg: 'Число не может быть нулём' }
            ],    

    weight: [ 
              { required: true, msg: 'Поле не может быть пустым' },
              { pattern: 'number', msg: 'Введите число' },
              { pattern: /^[0-9]\d*(\.\d+)?$/, msg: 'Введите положительное число' },
              { pattern: /^[1-9]\d*(\.\d+)?$/, msg: 'Число не может быть нулём' }
            ]                                    
                                                 
  }       

});


после того как пользователь кликает по кнопке submit происходит валидация:
events:{
    'click #submitBtn' : 'submit',
    'click #addPlaceBtn' : 'addPlace'
  },

  submit: function() { 
    var validationSuccess = true, 
        data = this.$el.find('#shippForm').serializeObject();

    console.log(data, 'data')

       

    APP.placesCollection.each(function(model) { 
        model.set(data); 
        console.log(model, 'model')
        console.log(model.isValid('length'), 'is valid length')
        console.log(model.isValid(true), 'is valid model')

        for(attr in model.attributes) {   
            if((attr != 'idPlace') && (attr != 'hardBox') && (attr != 'overCargo')) {   
                console.log(model.isValid(attr), attr)

                if(!model.isValid(attr)) {                  
                    validationSuccess = false;
                };
            };            
        }        
    }, this ); 

    console.log(validationSuccess)

    //$('#paymentModal').modal('show');
  },


проблема в том, что все методы isValid() высегда возвращают true(даже для явно неввалидной формы - не заполненной). это хорошо видно по выводу в консоли

мне это не понятно

полная версия тут: https://github.com/zlodiak/shipping_form
живая страничка тут: http://fh79272k.bget.ru/files/works/shipping_form/1/

Последний раз редактировалось zlodiak, 29.05.2016 в 15:46.
Ответить с цитированием