2014-10-26 2 views
1

Я использую плагин Backbone.Validation для проверки простой формы. Ниже моя модельПлагин проверки подлинности магистрали не проверяет

var BuyerModel = Backbone.Model.extend({ 
    defaults: { 
     name: '', 
     age: '' 
    }, 

    validation: { 
     name: { 
      required: true 
     }, 
     age: { 
      min: 18 
     } 
    }, 

    initialize: function() { 
     _.extend(Backbone.Model.prototype, Backbone.Validation.mixin); 
    } 

}); 

Ниже мой взгляд

var BuyerModelFormView = Backbone.View.extend({ 

    events: { 
     'click [name~="save"]': 'save' 
    }, 

    initialize: function() { 
     Backbone.Validation.bind(this); 
    }, 

    template: _.template('\ 
     <form>\ 
       Enter name:\ 
       <input name="name" type="text" value="<%= name %>"><br>\ 
       Enter age:\ 
       <input name="age" type="text" value="<%= age %>"><br>\ 
       <input type="button" name="save" value="Save">\ 
     </form>\ '), 

    render: function() { 
     var html = this.template(this.model.toJSON()); 
     $(this.el).html(html); 
    }, 

    save: function() { 
     console.log(this.model.toJSON()); 
     this.model.set({ 
      name: $('[name~="name"]').val(), 
      age: $('[name~="age"]').val() 
     }); 

     console.log(this.model.toJSON()); 
    } 

}); 

Вот как я использую его

var buyerModel = new BuyerModel(); 

    var buyerModelFormView = new BuyerModelFormView({ 
     model: buyerModel, 
     el: 'body' 
    }); 

    buyerModelFormView.render(); 

Когда я ввожу что-либо в форме и нажать кнопку ввода, он обновляет модель, но не подтверждается. Даже если я ввожу неверную модель значений, все равно получает обновление.

Что я делаю неправильно и как я могу это решить?

ответ

4

Set сила проверки, как этот

this.model.set({ 
    name: $('[name~="name"]').val(), 
    age: $('[name~="age"]').val() 
}, {validate: true}); 

Является ли это то, что вы хотите?

Поскольку Model.set имеет такую ​​строку

// Run validation. 
     if (!this._validate(attrs, options)) return false; 

И

// Run validation against the next complete set of model attributes, 
// returning `true` if all is well. Otherwise, fire an `"invalid"` event. 
_validate: function(attrs, options) { 
    if (!options.validate || !this.validate) return true; 

Так что, если вы не прошли Validate - он будет проигнорирован

Проверить таким образом

$(function(){ 
    var buyerModel = new BuyerModel(); 

    buyerModel.on('change', function(){ 
     console.log('on change', arguments); 
    }); 

    var buyerModelFormView = new BuyerModelFormView({ 
     model: buyerModel, 
     el: 'body' 
    }); 

    buyerModelFormView.render(); 
}); 
+0

Теперь он проверяет bu t он все еще обновляет модель даже с неправильными значениями. – 2619

+0

Нет, это не так - у модели есть пустые оценщики из раздела по умолчанию. –

+1

Извините, что вы правы. – 2619

Смежные вопросы