2012-11-13 136 views
1

我有一組需要驗證的項目作爲一個整體。我在該組上設置了validatedObservable,但不顯示錯誤消息。基因敲除驗證validatedObservable組錯誤

我在這裏有一個簡化的例子。我希望每個數字都在0-100之間,並且總和恰好爲100.我該如何處理這種驗證?

更新:我知道在這個例子中,我可以做一個ko.computed並驗證,但那不是我所需要的。

例子:http://jsfiddle.net/CGuW2/5/

0-100:<input data-bind="value: num1, valueUpdate: 'afterkeydown'"/><br> 
0-100:<input data-bind="value: num2, valueUpdate: 'afterkeydown'"/><br> 
<span class="validationMessage" data-bind='text: isValidSum.errors()'></span> 

ko.validation.rules['mustEqual'] = { 
    validator: function (val, otherVal) { 
     return (parseInt(val.num1()) + parseInt(val.num2())) == otherVal; 
    }, 
    message: 'total must equal {0}' 
}; 
ko.validation.registerExtenders(); 

var viewModel = { 
    num1: ko.observable("50").extend({ number: true, min: 0, max: 100 }), 
    num2: ko.observable("50").extend({ number: true, min: 0, max: 100 }) 
}; 

viewModel.isValidSum = ko.validatedObservable({ 
          num1: viewModel.num1, 
          num2: viewModel.num2 
         }).extend({ mustEqual: 100 }); 

ko.applyBindings(viewModel); 
+0

在Chrome中我可以看到「請輸入小於或等於值100」。如果我輸入大數字...... – nemesv

+0

這些錯誤消息是針對每個數字的。我也需要驗證組。每個數字必須在0-100之間,總和必須等於100.我更新了示例,因爲它有缺陷。 – Homer

回答

1

我需要在text: isValidSum.error而不是text: isValidSum.errors()結合使用extend。此外,看起來你必須綁定visible: !isValidSum.isValid()當你這樣做。

所以我的解決辦法是這樣的:

例子:http://jsfiddle.net/CGuW2/6/

0-100:<input data-bind="value: num1, valueUpdate: 'afterkeydown'"/><br> 
0-100:<input data-bind="value: num2, valueUpdate: 'afterkeydown'"/><br> 
<span class="validationMessage" data-bind='visible: !isValidSum.isValid(), text: isValidSum.error'></span> 
+0

授予這似乎工作,但我不認爲這是它是如何打算完成的。 https://github.com/ericmbarnard/Knockout-Validation/issues/41它的例子顯示,你應該將validatedObservable調用的結果傳遞給applyBindings作爲你的根VM ......但是我無法工作https://github.com/ericmbarnard/Knockout-Validation/issues/202。你有任何進一步的頓悟? –

+0

我有一個頓悟。自從我在這裏發佈我的答案(庫版本)以及我不再工作的解決方案後,情況發生了變化。我發佈了一個類似的問題[這裏](http://stackoverflow.com/questions/36408514/is-there-a-way-to-extend-validation-on-knockout-validations-validatedobservable)在哪裏我想我有一個更好的現在爲圖書館提供答案(ko 3.4,kv 2.0.3)。 – Homer