Как запустить валидацию в backbone.js 1.2.x при использовании метода create?

Доброе время суток.
Столкнулся c проблемой валидацией при использовании метода collection.create.
Мною была создана модель в которой я использовал метод валидации:

App.Models.Contact = Backbone.Model.extend({
    validate: function(attrs, options) {
        if (!attrs.first_name || !attrs.last_name) {
            return "Укажите имя и фамилию";
        }
        if( !attrs.email_address){
            return 'Пожалуйста введите валидный email';
        }
    }
});


Само собой создал коллекцию:
App.Collections.Contacts = Backbone.Collection.extend({
    models: App.Models.Contact,
    url: '/contacts'
})

Ну а дальше вьюха:
App.Views.AddContacts = Backbone.View.extend({
    el: '#contacts-form',

    events: {
        'submit' : 'addContact'
    },

    addContact: function(e){
        e.preventDefault();
        var addContEvent = this.collection.create({
            first_name:     this.$('#first_name').val(),
            last_name:      this.$('#last_name').val(),
            email_address:  this.$('#email_address').val(),
            description:    this.$('#description').val()
        }, { wait: true });
    }

})


В принципе все делал по видео от команды LoftBlog 2013 года (Респект ребятам), использовали они там (на нынешнее время) старенькую версию backbone. На сколько я понял, валидация в метод set, а само собой create по умолчанию отключена. Так вот вопрос: Как же использовать эту самую валидацию?

Заранее спасибо!
  • Вопрос задан
  • 232 просмотра
Пригласить эксперта
Ответы на вопрос 1
k12th
@k12th
console.log(`You're pulling my leg, right?`);
В документации написано, что если клиентская валидация фейлится, то модель не сохраняется.
Если посмотреть код, то Collection#create вызывает Collection#_p;repareModel, а оттуда вызывается new this.model, а в конструкторе модели по умолчанию вызывается Model#set.

Так что должно работать. Если не работает, то ставьте брейкпойнты и смотрите, что происходит.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы