2013-10-11 127 views
1

我使用了Backbone驗證插件(可從https://github.com/thedersen/backbone.validation獲得)。 我也使用Bootstrap 3.我想驗證onChange或onBlur事件。骨幹驗證問題

我用它作爲這樣的:

在Models.js,我有這樣的規則:

validation: { 
     miliage: { 
      required: true, 
      pattern: 'number', 
      msg: 'Укажите корректный пробег' 
     }, 
     email : { 
      required: true, 
      pattern: 'email', 
      msg: 'Укажите корректный email' 
     }, 
    }, 

在Views.js渲染HTML之後我綁定驗證插件:

Backbone.Validation.bind(this, { 
    valid: function(view, attr, selector) { 
     console.log('valid'); 
     console.log(attr); 
     control = view.$('[' + selector + '=' + attr + ']') 
     group = control.parents(".form-group") 
     group.removeClass("has-error"); 
     group.find(".help-block").remove(); 
    }, 
    invalid: function(view, attr, error, selector) { 
     console.log('invalid'); 
     console.log(attr); 
     control = view.$('[' + selector + '=' + attr + ']'); 
     console.log(control); 
     group = control.parents(".form-group"); 
     group.addClass("has-error"); 
     group.find(".help-block").remove(); 
     group.append("<span for="+attr+" class='help-block'>"+error+"</span>"); 
    } 

});

我使用Bootsrap規則顯示錯誤消息。

按照這種觀點,我有這樣的活動:

"change #email"  : "setEmail", 
"change #miliage" : "setMiliage", 

和適當的功能(我相應地設置值模型):

setMiliage : function(event) {  
    console.log($(event.currentTarget).val()); 
    this.model.set('miliage', $(event.currentTarget).val(),{validate : true}); 
}, 
setEmail : function(event) { 
    this.model.set('email', $(event.currentTarget).val(),{validate :true}) 
}, 

正如你所看到的,我通過PARAMS驗證:true to方法設置 - 爲了驗證每次onChange事件觸發時

問題:執行驗證在模型的每個方面(它的所有屬性),這就是回調函數有效無效觸發驗證規則中定義的每個屬性的原因。我有兩個或更多的字段需要驗證,並且當用戶更改其中的任何文本時 - 在所有字段中執行驗證。

示例:當用戶第一次打開頁面時,字段'miliage'和'email'爲空,當他們在第一個字段中鍵入一個值(miliage)時,另一個字段表示錯誤發生 - 因爲它仍然是空的(用戶還沒有輸入),我想只顯示第一個字段的消息。換句話說,第二個字段當然是無效的,但用戶還沒有到達那裏。

問題:有沒有辦法在一個當前字段上執行驗證,只有一個用戶發生了變化,並且只顯示與其相關的錯誤?我還想在模型無效時將值放入模型中 - 我希望它只顯示錯誤。另外,我想執行控制驗證提交表單

我知道有哪些可以驗證只有一個字段和isValid(場)方法(骨架保存方法之前) - 但它不會觸發有效或無效的事件

提前致謝!

回答

0

我認爲正確的方法是跟蹤哪些字段至少被更改過一次,並在處理「更改」或「模糊」事件時忽略其他字段上的驗證錯誤。當然,這不適用於處理'提交',其中不應該忽略任何字段

+0

謝謝。我通過未在模型中爲此輸入設置默認值來解決此問題。模型中沒有屬性 - 沒有對更改或模糊進行驗證,但在提交整個模型驗證(當model.validate()觸發器)時仍然可用。 – programmer

0

我通過在此模型中未設置默認值來解決此問題(僅驗證更改的輸入) - 驗證僅適用於屬性,已經在模型中。當我需要onChange onBlur驗證時,我使用model.set('email','[email protected]',{validate:true}),當整個模型 - model.validate()或模型。保存()