2013-11-27 51 views
2

我有一個模型有2個屬性。先讓我解釋一下。骨幹驗證單個屬性保存只有

Backbone.Model.extend({ 
    validation: { 
      username: [ 
       {required: true, msg: 'Enter email/username.'}, 
      ], 
      password: [ 
       {required: true,msg: 'Enter password.'}, 
       {minLength:20,msg: 'Incorrect password length.'}] 
     }, 
}); 

我想在保存功能中驗證單個屬性。你有什麼主意嗎? 的意思是,如果我的用戶名&密碼字段爲空,那麼只會出現用戶名錯誤。

我正在使用backbone.validation骨幹。

感謝

回答

1

有兩種方法您可以使用:

方法1

我認爲這樣做最簡單的方法是,你沒有設置密碼字段,直到用戶名後被驗證。要引用FAQ

什麼時候驗證?

如果您使用Backbone v0.9.1或更高版本,將驗證模型中的所有屬性。但是,如果名稱從未被設置(顯式或默認值),該屬性在被設置之前不會被驗證。

當填充表單時驗證表單非常有用,因爲您不希望提醒用戶輸入中尚未輸入的錯誤。

如果您需要驗證整個模型(這兩個屬性都已設置或沒有設置),您可以在模型上調用validate()或isValid(true)。

因此,不要在您的整個模型上調用驗證。先在用戶名字段中調用它,然後在密碼字段中調用它。

此外,請勿在用戶名已驗證之前在模型中設置密碼字段。

方法2

另一種方法是使用在FAQ中描述的條件驗證:

你支持有條件的驗證?

是的,很好,有點。您可以通過將所需驗證程序指定爲函數來進行條件驗證。

所以,你的代碼可能看起來像:

Backbone.Model.extend({ 
    validation: { 
      username: [ 
       {required: true, msg: 'Enter email/username.'}, 
      ], 
      password: [ 
       {required: function(val, attr, username) { 
        return Bool(username); //some code here- return true if username is set, false if it is not. This rough example may not work in the real world. 
       },msg: 'Enter password.'}, 
       {minLength:20,msg: 'Incorrect password length.'}] 
     }, 
}); 

我敢肯定這就是Ulugbek Komilovich is suggesting,雖然我不知道該回答的語法是相當正確的。

+0

感謝@jonnybot,我們能做到。但我認爲這不是一個合適的解決方案,應該有一些選擇。 –

3

使用Backbone驗證單個或多個屬性。驗證,使用下面的代碼:

yourModel.isValid('username') // or 
yourModel.isValid([ 'attribute1', 'attribute2' ]) 
0
M = Backbone.Model.extend({ 
    validation: { 
     username: [ 
     {required: true, msg: 'Enter email/username.'}, 
     ], 
     password: function(value, attr, computedState) { 
     // new M(this.get('username')); //or use second way 
     if(this.get('username')) { 
      return 'Enter email/username.'; 
     } 
     // other checks 
     } 
    }, 
});