2013-04-25 62 views
1

如何動態定義所需的「onlyIf」規則?通過所有的規則設置以這種方式KO驗證規則對象敲除驗證:動態定義僅需要如果規則

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

和我循環:

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

我得到FO從服務器我所有輸入的規則,在這種格式

這不起作用,因爲key變量只在該循環中定義。

我不想明確定義「onlyIf」規則,因爲我有> 100個變量來處理,並且這些規則已經存在於服務器上。

任何幫助表示讚賞。

回答

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

這工作,據我所知道的,但給人的感覺並不理想。我也將不得不測試它是否跨瀏覽器。