2016-08-02 6 views
0

別の問題の調査中、<span>に観測値にバインドされた本当に奇妙な現象が見つかりましたそれをコンソールウィンドウに記録する機能は "偽"を表示します!(JsFiddle)knockout observableは、画面上のconsole.logへのバインドの値が異なることを示しています。

フィドルはここにある:http://jsfiddle.net/fbc0w39w/1/

クリックして緑色のボタンの上に、「それをログ」と、コンソールに「真」を参照してくださいをクリックして、コンソールウィンドウを表示するにはクロームでF12を使用します。送信ボタンのすぐ下に「true」と表示されます。次に、ユーザーログインのテキストを消去し、別の場所(ぼかしの値の更新)をクリックし、ログインボックスにエラーメッセージを表示します。送信ボタンの下の値はtrueのままです。もう一度 "ログイン"ボタンをクリックしてください!それは "False"を記録します。

どちらの値も、私が知る限り、vo.isValid変数から来ています...?

+0

申し訳ありませんが、そこに間違ったリンクを持っていた:

は、ここで "作業" フィドルです! – TheMook

答えて

1

これは問題である可能性があります。getData機能では、validatedObservableを新しいものに置き換えようとしています。下の2つのUI要素は、古いものに拘束されています(isValid)。

私はvalidationObservableを使用しての「正しい」方法は、(それを使用したことがない)ですが、あなたはそれが観測可能で、それを入れ子にすることで問題だと見ることができるかわからないんだけど:

self.vo = ko.observable(ko.validatedObservable()); 

self.getData = function() { 
    self.selectedUser(ko.mapping.fromJS(data, validationMapping)); 
    self.vo(ko.validatedObservable(self.selectedUser(), {deep: true, live: true, observable: true})); 
}; 

だから、おそらくvalidatedObservableが新しいインスタンスをインスタンス化することなくselectedUserの変更に反応することを確かめる方法を見つけたいと思うでしょう。 http://jsfiddle.net/st5e0r1o/

+0

奇妙なことに、私はちょうどそれも見てきました。私は、あなたが示したように、既存の観測可能なものを直接置き換えようとしましたが、画面上とconsole.logの両方にエラーが表示されません。 – TheMook

+0

ああ、ちょうどあなたが観察可能なものを入れることでそれを治ったのを見ました。最初は気付かなかった。私はバリデーションの使用に慣れていないので、それは私にとって初めてのことです。 – TheMook

関連する問題