2012-03-15 22 views
1

私は、問題を示し、ここで簡単なデモを作成しました:KnockoutJS - マップされたオブジェクトを観測する観測可能なプロパティを作成するにはどうすればよいですか?

http://jsfiddle.net/boblauer/eCugY/

は基本的に、私は、ユーザーのプロパティを更新したときに実行するために私のuserUpdated機能をしたいが、ページのロード時には、一度だけ実行されます。

何か助けていただければ幸いです。

答えて

1

計算されたコンテキストとしてユーザーを設定しているため、ユーザーが更新されたときに計算されると、userUpdatedが発生すると予想されるという問題があります。

これらのKO計算された仕事は、まずそれが最初に発射され、発射の過程で遭遇した観察可能なものが記録されます。これらの観測値の1つが更新されると、計算された関数が再び発生します。あなたの場合、関数はobservablesを呼び出しません。単にアラートを呼び出すだけです。コンテキストオブジェクトは、オブザーバブルリストの中で数えられません。

これは、あなたの関数で観測可能なユーザーを使用するだけで動作する可能性があります。代わりに、あなたはおそらく観測値が変わったときに呼び出される関数であるサブスクリプションを使用するべきです。計算結果を

に置き換えます。
user.name.subscribe(function(newvalue) { 
    alert('user updated to ' + newvalue); 
}); 

計算された値は、通常、計算値を返すために使用されます。任意の関数呼び出し元としてそれらを使用し始めると、無限ループに陥ることになります(計算内の観測値を更新することに決めた場合)。

これが役に立ちます。

+0

驚くべきことに、ロジックを実行するために計算を使用して汚いと感じましたが、別のアプローチがあることはわかりませんでした。本当にありがとう! –

関連する問題