2012-03-01 3 views
25

これが可能かどうかは確かではありませんが、何かが有効な/無効な従属オブザーバブルを経由して検証システムに通知するシナリオがあります。これは、dependantObservableが基になるobservablesの値が変更されてしまうため、ユーザーがフォームに記入するときに効果的です。 (つまり、Nameプロパティが変更された場合は、isValidの依存関係を再評価し、バインディングに検証システムへのフックを通知します)。手動でdependantObservableを再評価するためのノックアウトを取得

私の問題は、ユーザーがフォームにまったく触れず、すぐに提出に行くと、観察値の基になる値が変更されていないため、バインディングがトリガーされないため、起こっている検証の変更について理想的には、私は各観測値を調べ、それを現在の変数に代入して検証評価をプッシュし、検証状態の変更をトリガーすることは望ましくありません。だから私がしたいのは、isValid dependantObservableをに更新することです。より良い言葉がないのは、です。

これはかなりのいずれかの厄介な方法と思われるが、私のオプションは、いずれかのように見える:(恐ろしい) 2に対して検証されている全ての観測上の値の変更を強制)

1)のisValid dependantObservableの再評価を強制サブスクライバーをトリガーするには 3)バリデーションライブラリを書き換えてforceValidation()関数を公開すると、何らかの理由で再評価が行われ、基礎となるオブザーバが検証パイプラインをトリガーする必要はありません。

アイデア?

答えて

49

計算された観測値(isValid)には、notifySubscribers(currentValue)と呼ぶことができます。これは、現在の値を持つサブスクライバに通知します。計算結果を再評価することはなく、現在の値で加入者に通知するだけです。

+0

私はまた、「notifySubscribers(currentValue)」が仕事をしているとも言われましたが、最初に読み込みが必要ない場合は、より良い解決策です。ありがとう! – Grofit

+0

valueHasMutatedは、observableに内部的に格納されている現在の値を送信し、notifySubscribersは最初のargとして渡す値を送信します(ケースの現在の値を読み取る必要があります)。 –

+10

@RPNiemeyerこの仕組みについて何か変更はありますか? 2.3.0では、 'Object ...はメソッドがありません 'valueHasMutated''を呼び出すのに対し、' myComputed.notifySubscribers(myComputed())'を呼び出すとエラーは発生しません。 – ach

4

バインドを追加 formValid = ko.computed(return true if all values are valid)にボタンを送信します。この方法では、フォームが正しく埋められるまでユーザーは送信できません。

使用ko.validation.validateObservable(yourDependentObservable)手動

をフィールドを再検証やyourDependentObservableyourObservableに依存している場合yourObsevable.notifySubscribers()を使用します。

関連する問題