【问题标题】:Knockout Validation: Dynamically define Required onlyIf rule淘汰赛验证:动态定义Required onlyIf规则
【发布时间】:2013-04-28 16:35:05
【问题描述】:

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

感谢任何帮助。

【问题讨论】:

    标签: validation knockout.js knockout-validation


    【解决方案1】:

    我最终将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;
        }
      }
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-29
      • 2017-12-02
      • 2016-09-15
      • 1970-01-01
      • 2017-09-26
      • 2013-06-23
      • 2013-07-01
      • 2016-08-13
      相关资源
      最近更新 更多