ある程度の深さ/複雑さを持つViewModelにバインドされたビューにKnockoutを使用しています。
ViewModelを検証するには、VMツリー全体を計算する必要があります(子孫のウォーキングと比較)。私は、ノックアウト検証プラグイン@ https://github.com/ericmbarnard/Knockout-Validationを利用して、任意のカスタム検証ルールを作成し、エラーを報告したいと考えていました。
http://jsfiddle.net/drdamour/ZrVZ7/でKO計算されたオブザーバブルを使用して1つの可能なアプローチを設定しました。検証ルールは、2つのサブコレクションが同じ値を持たないことを確認することです。これは機能していますが、Knockout-Validationを使用しておらず、私のルールは計算されたobservableに実装されていますが、これは間違っているようです。
私の質問はKnockoutValidationvalidatedObservable group errorと非常に似ていますが、発見されたソリューション(http://jsfiddle.net/CGuW2/6/でホストされている)は理想的とは言えません。
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);
検証済みの自己をプロパティとしてそれ自体(isValidSum)に追加することにより、ViewModelを複製しているためです。http://jsfiddle.net/drdamour/5B8s4/でこの冗長性を排除しようとしましたが、ビューはvalidatedObservableにバインドできません。
var viewModel = {
num1: ko.observable("50").extend({ number: true, min: 0, max: 100 }),
num2: ko.observable("50").extend({ number: true, min: 0, max: 100 })
};
var vm = ko.validatedObservable(viewModel).extend({ mustEqual: 101 });
ko.applyBindings(vm);
これは、KOまたはKO-Validationのバグである可能性があります。または、まったく間違っている可能性があります。
したがって、問題は、VMの複数のプロパティとレイヤーにわたって評価される条件に対してVMが有効であるかどうかを判断するためのノックアウトの最良の方法は何ですか?