1

全体として検証する必要があるアイテムのグループがあります。グループに をセットアップし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);
4

2 に答える 2

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>
于 2012-11-14T23:20:16.547 に答える
0

このフィドルをチェックしてください。合計検証を実装しました。
http://jsfiddle.net/CGuW2/3/
では使えないのが問題だったと思いますextendvalidatedObservable

于 2012-11-13T17:49:55.810 に答える