2017-07-28 6 views
1

私はko extend validationを使用して検証しています。 以下のようなことを試みています。 ko.extendは同じタイプ(この場合はmax)の複数のバインディングをサポートしておらず、最初のルールしか追加しません。 関数で条件付きでパラメータを渡す方法はありますか?または私の唯一の方法は、カスタム検証を書いていますか?複数の最大KO検証を集計する

  myModel.prop2.extend({ 
      max: { 
       onlyIf: function() { 

        var test = myModel.prop1() != undefined && 
         myModel.prop1() !== "Percentage"; 
        return test; 
       }, 
       params: 100000 
      } 
     }).extend({ 
      max: { 
       onlyIf: function() { 
        return myModel.prop1() != undefined && 
         myModel.prop1() === "Percentage"; 
       }, 
       params: 100 
      } 
     }); 

答えて

0

は、私はあなたが本当に達成しようとしているか、わからないんだけど、

.extend({ 
      validation: [{ 
       validator: function (val, someOtherVal) { 
        if (myModel.prop1()() !== "Percentage") { 
         return val < someOtherVal; 
        } 
        return true; 
       }, 
       message: "Too big!!!!", 
       params: 100000 
      }] 
     }) 
0

を解決策を見つけました。しかし、あなたが試みた方法は、私が思うように有効な方法ではありません。だから、あなたは、以下のようなものを使用する

Solution 1:

を持っていることがありますが、バリデータまたはそれらの配列を供給することができます。

var testObj = ko.observable(3).extend({ 
     validation: [{ 
      validator: function (val, someOtherVal) { 
       return val === someOtherVal; 
      }, 
      message: 'Must Equal 5', 
      params: 5 
     },{ 
      validator: function (val) { 
       return val !== 8; 
      }, 
      message: 'Can not be 8', 
      params: 8 
     }] 
    }); 

Solution 2:

ko.validation.rules['compareTo'] = { 
    message: "Compare to", 
    validator: function (val, params) { 
     if (val === null || params.value() === null) 
      return params.allowNull; 
     switch (params.way) { 
      case "<": return val < params.value(); 
      case "<=": return val <= params.value(); 
      case ">": return val > params.value(); 
      case ">=": return val >= params.value(); 
      default: throw new Error("params is not well defined"); 
     } 
    } 
} 

myModel.prop2.extend({ compareTo: { 
         message:"your message", 
         params: { 
            way: ">=", 
            value: model.otherObs, 
            allowNull: true 
         }, 
         onlyIf: function() { /*your test*/ } 
        }}); 

は、この情報がお役に立てば幸いです。、

関連する問題