2012-04-16 118 views
0

如何驗證模型上的某些屬性?目前,我是否在傳遞到驗證對象存在的屬性:Backbone.js模型驗證方法

validate: function(attrs) { 

     // Number 
     if (attrs.minimum) { 
      if (isNaN(attrs.minimum)) { 
      return -1; 
      } 
     } 
     if (attrs.maximum) { 
      if (isNaN(attrs.maximum)) { 
      return -1; 
      } 
     } 
} 

,但如果我想驗證,然後字符串值:

if (attrs.mystring) { 
// Do validation 
} 

會失敗,並確認從未發生。

回答

0

林有點困惑你的措辭,但我想你想檢查它是否不是一個空字符串?並制定出它的可能性undefined..if這樣,那麼這是你想做的事..

validate: function(attrs) { 
    // Number 
    if (attrs.minimum) { 
     if (isNaN(attrs.minimum)) { 
     return -1; 
     } 
    } 
    if (attrs.maximum) { 
     if (isNaN(attrs.maximum)) { 
     return -1; 
     } 
    } 
    if (typeof(attrs.mystring) != "undefined"){ 
     if (!attrs.mystring){ 
     return -1; 
     } 
    } 
} 

,如果你只想驗證屬性之一,你應該寫你的驗證功能適應選項相應

validate: function(attrs, option) { 
    if (!option){ 
    // Number 
    if (attrs.minimum) { 
     if (isNaN(attrs.minimum)) { 
     return -1; 
     } 
    } 
    if (attrs.maximum) { 
     if (isNaN(attrs.maximum)) { 
     return -1; 
     } 
    } 
    if (!attrs.mystring){ 
     return -1; 
    } 
    }else{ 
    switch(option){ 
     case("string"): 
     if (!attrs.mystring){ 
      return -1; 
     } 
     break; 
     case("number"): 
     // Number 
     if (attrs.minimum) { 
      if (isNaN(attrs.minimum)) { 
      return -1; 
      } 
     } 
     if (attrs.maximum) { 
      if (isNaN(attrs.maximum)) { 
      return -1; 
      } 
     } 
     break; 
    } 
    } 
} 

有很多方法可以做到這一點,這可能是效率最低的笑,但使用您的例子,它會做的工作。

也,這是不是真的每說一個Backbone.js的問題...但一般的JS

+0

因此,沒有辦法只檢查一些屬性?在執行任何實際驗證之前,我必須檢查每個屬性的未定義值? – Jack 2012-04-16 20:25:27

+0

當然,如果你將一個額外的標誌傳遞給validate函數,該函數指定你想要驗證哪一個......通常,如果沒有任何東西被傳遞,那麼你會想要驗證所有東西,然後只根據標誌指定一個。 – RGB 2012-04-16 20:28:03

+0

我不確定您的問題是否滿足您的請求 – RGB 2012-04-16 20:28:30

1

骨幹現在支持具有財產。所以你可以這樣做:

var Person = Backbone.Model.extend({ 
     defaults: { 
      "name": "Kevin", 
      "age" : 26, 
      "job" : "web" 
     }, 

     validate: function(attrs, options) { 
      for(k in attrs) { 
       if(!this.has(k)) { 
        return k + ' attribute is not exist'; 
       } 
      } 
     } 
    }); 

    var person = new Person; 

    person.on("invalid", function(model, error) { 
     console.log(error); 
    });