2017-07-28 93 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*/ } 
        }}); 

希望這有助於。,