0

たとえば、10個の入力があります。彼らは空のルールを使用しますが、このような繰り返しを回避している場合、私は確認したい:Backbone.validationでいくつかの入力を検証する1つのルール

firstInput :{ 
    required: true, 
    msg: 'Empty!' 
}, 
// ... 

tenthInput :{ 
    required: true, 
    msg: 'Empty!' 
} 

Backbone Validationを使用してすべての入力に対して1つのルールを使用する任意の方法はありますか? Backbone Validation documentationから

firstInput :{ 
    pattern: email, 
    msg: 'Email!!!' 
} 

答えて

1

// validation attribute can also be defined as a function returning a hash 
var SomeModel = Backbone.Model.extend({ 
    validation: function() { 
    return { 
     name: { 
     required: true 
     } 
    } 
    } 
}); 

あなたはその関数を持っているあなたのモデルを調整することができます:

var SomeModel = Backbone.Model.extend({ 
    /** 
    * List of field which are required. 
    * @type {Array|Function} 
    */ 
    required: ['firstInput', 'secondInput', /*...*/ 'tenthInput'], 
    /** 
    * Same format as Backbone Validation 
    * @type {Object|Function} 
    */ 
    specificValidation: { 
     firstInput: { 
      pattern: "email", 
      msg: 'Email!!!' 
     } 
    }, 

    validation: function() { 
     var inputs = _.result(this, 'required'), 
      rules = _.result(this, 'specificValidation'), 
      requiredRule = { required: true, msg: 'Empty!' }; 

     // apply the default validation to each listed field 
     // only if not already defined. 
     _.each(inputs, function(field) { 
      rules[field] = _.defaults({}, rules[field], requiredRule); 
     }); 

     return rules; 
    } 
}); 
+0

を各入力には、他のユニークな検証が例えば、同じ時間を支配することができますビューへのバインディングはどうですか?私はあなたの例をしましたが、Uncaught TypeError:プロパティ 'を読み取ることができません'の 'undefined'の呼び出しが表示されます – nllsdfx

+0

@DmitrySorokaそれは箱からうまくいくはずですが、多分私は何か忘れてしまったかもしれません。バグは他の場所にある可能性があります。あなたは[mcve]で新しい質問をするのが最善でしょう。 –

+0

私はそれを理解しました! 'specificValidation'のキーは、規則を持つオブジェクトの配列です。しかし、あなたの 'rules [field] = _defaults({}、rules [field]、requiredRule)'はオブジェクトだけを扱い、オブジェクトの配列は扱いません。 – nllsdfx

関連する問題