Knockout验证:动态定义Required onlyIf规则

时间:2013-04-25 17:16:49

标签: validation knockout.js knockout-validation

如何动态定义所需的“onlyIf”规则?

我从服务器获取所有输入的规则,格式为:

"Var1" => array("required"=>"onlyIf", "requiredIf"=>"Var2", "min"=>1, "max"=>1000)

我循环完成所有规则,以这种方式为KO验证设置规则对象:

for (var key in rules) {
  var rule = new Object();
  if (typeof (key.required) != "undefined") 
    rule.required = key.required == "onlyIf" ? {
      onlyIf: function () {
        return self[self.rules[key].requiredIf]();
      }
  }: key.required;
}

这不起作用,因为key变量仅在该循环中定义。

我不想明确定义“onlyIf”规则,因为我有> 100个要处理的变量,并且这些规则已经存在于服务器上。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我最终将onlyIf对象构造为字符串并使用eval()执行它:

for (var key in rules) {
  var rule = new Object();
  if (typeof (key.required) != "undefined") {
    if (key.required == "onlyIf") {
        onlyIf = eval( "onlyIf={onlyIf: function() { return self."+key.requiredIf+"(); }}" );
        thisRule.required= onlyIf;
    } else {
        thisRule.required = key.required;
    }
  }
}

就我所知,这是有效的,但它并不理想。我还必须测试它是否可以跨浏览器工作。