如何动态定义所需的“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个要处理的变量,并且这些规则已经存在于服务器上。
感谢任何帮助。
答案 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;
}
}
}
就我所知,这是有效的,但它并不理想。我还必须测试它是否可以跨浏览器工作。