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

希望这有助于。,