2012-04-16 23 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

あなたの言葉では少し混乱していますが、最初に空の文字列ではないかどうかを確認したいと思いますか?そしてまた、あなただけの属性のいずれかを検証したい場合、あなたはあなたの検証関数を記述する必要があり

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; 
     } 
    } 
} 

...そう、これはあなたがしたいと思うものですundefined..ifそれがあるという可能性をうまくオプションに対応するために、それに応じて

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

+0

確かに、どちらを検証するかを指定するvalidate関数に追加のフラグを渡すと、何も渡されない場合はすべてを検証し、その後はフラグに基づいて指定された場合のみ検証します。 – RGB

+0

あなたの質問に完全な答えがありません – RGB

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); 
    });