2016-07-12 11 views
1

observableのサブシファーの実行を強制するためにnotifySubscribersを使用する必要がある場合は、notifySubscribersにparamを渡すことができますが、渡されたparamはobservableの値を変更することも、サブスクライバに渡されることもありません、それはなぜ使用されていますか?いくつかのKnockoutのドキュメントでは、たとえばthis oneというようにパラメータが渡されていました。ここにはjsfiddle code snippetがあります。これは、パラメータがどこにも使用されていないことを検証します。私は何かを逃しているのですか、本当に意味がないのですか?ノックアウト、なぜnotifySubscribersのパラメータが必要ですか?

コードjsfiddle にHTML

<div data-bind="text: $data.content"></div> 

javascriptの

var viewModel = { 
    content: ko.observable('original') 
}; 

var cpted = ko.computed(function(){ 
    alert(viewModel.content()); 
    return viewModel.content(); 
}); 

ko.applyBindings(viewModel); 

viewModel.content.notifySubscribers('new value'); 

alert(viewModel.content()); 
+0

なぜ値が変更されていない場合に、「サブスクライバの実行を強制する」のか、非常に不思議です。価値が変わっていない場合、彼らは何をしていますか? – Tyrsius

+0

この文書にhttp://knockoutjs.com/documentation/extenders.htmlの例があります。notifySubscribers @Tyrsiusを検索してください。 –

答えて

4

notifySubscribersは、特定のイベントのために登録したすべてのサブスクリプションを呼び出します。既定では、サブスクリプションはchangeイベントに行われますが、サブスクリプションシステムは複数のイベントをサポートするように構築されています。内部的には、ノックアウトはbeforeChangeのイベントも発生させます。これはソースコードhereで確認できます。

hereを見て)subscribeメソッドのシグネチャは、あなたが最後のパラメータをオフのままにした場合、changeがデフォルトで使用されている

subscribe: function (callback, callbackTarget, event)

です。しかし、beforeChangeイベント、またはイベントに参加することができます!これは、notifySubscribersがイベント名をとる理由です。

値が変更されていない場合は、「サブスクライバの実行を強制的に」しようとしています。値が変更されていない場合でもカスタムイベントが実行されているため、カスタムイベントはchangeイベントより優れている可能性があります。

+0

私はあなたの答えを得ていません。それは私にとっては無関係です。 @Tyrsius –

+0

@Davidいくつかの詳細を追加しましたが、それは役に立ちますか?そうでない場合は、混乱を説明してください – Tyrsius

+0

私は考えていると思います。コードスニペットには計算結果しか含まれていないので、渡されたvalueToNotifyはどこでも使用されませんが、viewModel.content.subscribe(aCallback)を呼び出すと、 aCallbackのためのparam。私は基本的に依存関係とサブスクリプションの違いで混乱していたと思うが、それは別の質問だ。 @ティリュス –

関連する問題