2014-03-04 37 views
0

我有一個表單使用Backbone的model.validate函數來驗證表單。表單監聽模型的change sync invalid事件,如果模型具有validationError屬性,則呈現錯誤狀態。這在驗證失敗時效果很好,但隨後成功時,validationError對象仍然存在。Backbone.js如何在成功驗證時清除model.validationError

我知道,這是expected behaviourhttp://backbonejs.org/#Model-validationError),但我需要一種方式來運行的錯誤只渲染代碼當先前驗證失敗沒有調用model.isValid(),因爲我的驗證碼是相當複雜一些使用此通用視圖的模型類型。

render: function() { 
    var html = ''; 

    // Error Row html 
    if (this.model.validationError) { 
     html += this.renderValidationErrors(); 
    } 

    ... 

    this.$el.html(html); 

    ... 

} 

回答

2

骨幹,當你(或骨幹)正在做setsaveisValid框架集調用validate方法validationError屬性的結果。

方法validate在您的模型中應該返回nullundefined並且此值將在this.model.validationError屬性中設置。

如果您有validate方法比通過驗證通過時返回null的最簡單方法。

實施例:

validate: function() { 
    var errors = []; 
    if (!this.get('name')) { 
     errors.push({'name': 'Name is required'}); 
    } 
    return errors.length ? errors : null; 
} 
+0

感謝;這是問題的一部分;另一部分是我的驗證代碼調用'set';不是我曾經擁有的最好主意。 :) – CullenJ

+0

我也會建議檢查這個插件的反應驗證https://github.com/thedersen/backbone.validation。我已經多次使用過它,並且它在聲明式驗證中效果很好 –

+0

這應該是驗證:函數(attrs)和attrs.name而不是this.get('name')否則在實際設置屬性之前驗證doesn沒有工作。 http://backbonejs.org/#Model-validate –