Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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.
Ответить с цитированием
  #2 (permalink)  
Старый 29.05.2016, 16:58
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,198

zlodiak,
Биндинг между вьюхой и коллекцией забыл. В файле formView.js метод initialize перепиши так
initialize: function() {    
    APP.placesCollection = new APP.PlacesCollection();
        Backbone.Validation.bind(this, {
      collection: APP.placesCollection
    });	
    this.place = new APP.PlaceView(false);     

    new APP.PaymentModalView();
	
    this.render();
  }
Ответить с цитированием
  #3 (permalink)  
Старый 29.05.2016, 20:51
Кандидат Javascript-наук
Отправить личное сообщение для zlodiak Посмотреть профиль Найти все сообщения от zlodiak
 
Регистрация: 24.02.2012
Сообщений: 104

Сообщение от destus Посмотреть сообщение
zlodiak,
Биндинг между вьюхой и коллекцией забыл. В файле formView.js метод initialize перепиши так
initialize: function() {    
    APP.placesCollection = new APP.PlacesCollection();
        Backbone.Validation.bind(this, {
      collection: APP.placesCollection
    });	
    this.place = new APP.PlaceView(false);     

    new APP.PaymentModalView();
	
    this.render();
  }
спасибо, так и есть

походу тут только мы бекбон мучаем

ps:
и всё таки странно. по сути здесь тот же самый код, но никакого биндинга не требовалось

Последний раз редактировалось zlodiak, 29.05.2016 в 20:54.
Ответить с цитированием
  #4 (permalink)  
Старый 30.05.2016, 03:14
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,198

Сообщение от zlodiak
ps:
и всё таки странно. по сути здесь тот же самый код, но никакого биндинга не требовалось
А это тогда что? Backbone.Validation.bind(this);
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по backbone - не срабатывает событие vuler Общие вопросы Javascript 4 28.12.2014 20:20
Баг в backbone 1.0.0? YuriT Библиотеки/Тулкиты/Фреймворки 0 15.04.2013 10:46
onclick срабатывает со 2 раза в ie djonA Общие вопросы Javascript 19 24.03.2013 23:07
AJAX запрос в Internet Explorer срабатывает через раз nikolayseo jQuery 5 12.11.2012 22:13
Нажатие по дате в календаре срабатывает только со второго клика afr0 Events/DOM/Window 4 31.10.2012 11:39