Knockout Validation: динамическое определение правила Required onlyIf

Как динамически определить необходимые правила «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 переменными, и эти правила уже присутствуют на сервере.

Любая помощь приветствуется.


person Haven    schedule 25.04.2013    source источник


Ответы (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;
    }
  }
}

Это работает, насколько я могу судить, но не кажется идеальным. Мне также нужно будет проверить, работает ли он в кроссбраузерном режиме.

person Haven    schedule 26.04.2013