2012-04-03 7 views
3

私のモデル(knockout.jsを使用)またはむしろプロパティが変更されたときに(JSで)知る必要があります。knockout.jsでのイベントハンドラーモデルの変更

どうすればよいですか?ここで

いくつかのコード:

function DrawingToolViewModel() { 
    var self = this; 
    self.drawMode = ko.observable('Line'); 
} 
model = new DrawingToolViewModel(); 
ko.applyBindings(model); 

今描画モードに割り当てられたHTML要素が何らかの変更、モデルとバックで更新されます。いいですが、モデル内の何かが変更された場合、JSでどのように反応できますか?

EDIT

は私の質問には申し訳ありませんが、十分に明確ではありませんでした。私はobservablesを知っていますが、すべてのプロパティをサブスクリプションする必要はありません。

myViewModel.personName.subscribe(function(newValue) { 
    alert("The person's new name is " + newValue); 
}); 

:より多くのあなたが観測への変更が通知されるように、独自のサブスクリプションを登録したい場合は、例えば、彼らの購読機能を呼び出すことができます

+0

どのプロパティが変更されたかを知る必要がありますか?オブジェクトに深く、またはプロパティの最初のレイヤーだけを適用する必要がありますか? –

+0

この物件は最初のレイヤーではなく、深いものではありません。 – Marc

答えて

4

「をモデルに何かが変更された場合は通知する」などの

以下のコメントを要約knockoutjs.com

@詳細はViewModelに内のすべての変更に通知を受けるには、Ryan Niemeyer物品Aをチェックnd John papaさんのchangeTracker on NuGet

+0

私の質問は十分ではありませんでした。申し訳ありません。私はobservablesを知っていますが、すべてのプロパティをサブスクリプションする必要はありません。もっと「モデルの中の何かが変わったときに私に知らせる」のように。 – Marc

+2

私はあなたのノックアウトに汚れた旗を追加してこのポストを見ていきます。これにより、ビューモデルの変更が効果的に追跡され、ニーズに合わせて変更できるようになります。 http://www.knockmeout.net/2011/05/creating-smart-dirty-flag-in-knockoutjs.html私はそれに応じて私の答えを更新しました。サブスクリプションをオフにするだけであれば、 –

+1

サブスクリプションが必要な場合もあります。それ以外の場合は、変更トラッカーが必要以上になります。そのライアンの投稿は良いです。また、NuGetでchangeTrackerを作成してチェックアウトすることもできます。私はライアンの貢献を組み合わせたより多くの機能でそれを更新するつもりです...すぐに:) –

0

特定のプロパティが変更されたときに通知を受けたい場合は、いくつかの方法があります。あなたのビューモデルのANYプロパティの変更を通知するならば、私はこの記事を見てみましょう、しかし

model.drawMode.subscribe(function(newValue) {  
    // your js goes in here 
}); 

EDIT

:一つの方法は、subscribe機能を使用することです「ダーティフラグ」を作成するために:

http://www.knockmeout.net/2011/05/creating-smart-dirty-flag-in-knockoutjs.html

は、これが効果的にので、あなたのビューモデルに変更を追跡しますそれをあなたのニーズに適応させることができるはずです。

関連する問題