Knockout验证validatedObservable组错误

时间:2012-11-13 16:38:42

标签: knockout.js knockout-validation

我有一组我需要整体验证的项目。我在组上设置了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);

2 个答案:

答案 0 :(得分:1)

我需要绑定text: isValidSum.error而不是text: isValidSum.errors()。此外,当您执行此操作时,您似乎必须绑定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>

答案 1 :(得分:0)

检查这个小提琴,我已经实现了总和验证。
http://jsfiddle.net/CGuW2/3/
我认为问题在于您无法在extend

上使用validatedObservable