1

如何动态定义所需的“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 个变量要处理,而且这些规则已经存在于服务器上。

任何帮助表示赞赏。

4

1 回答 1

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;
    }
  }
}

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

于 2013-04-26T04:40:46.420 回答