コールバック関数の配列を含む静的クラスがあり、この静的クラスと対話するために使用される他のいくつかのクラスがあります...
静的クラスの簡単な例を次に示します。
var SomeStaticInstance = {};
(function(staticInstance) {
var callbacks = {};
staticInstance.addCallback = function(callback) { callbacks.push(callback); }
staticInstance.callAllCallbacks = function() { /* call them all */ }
}(SomeStaticInstance));
次に、それと対話する他のクラスの例を次に示します。
function SomeClassOne() {
this.addCallbackToStaticInstance = function() { SomeStaticInstance.addCallback(this.someCallback); }
this.someCallback = function() { /* Do something */ }
this.activateCallbacks = function() { SomeStaticInstance.callAllCallbacks(); }
}
function SomeClassTwo() {
this.addCallbackToStaticInstance = function() { SomeStaticInstance.addCallback(this.someOtherCallback); }
this.someOtherCallback = function() { /* Do something else */ }
this.activateCallbacks = function() { SomeStaticInstance.callAllCallbacks(); }
}
今私が抱えている問題は、いずれかのクラスを呼び出して activateCallbacks() に指示すると、クラスは独自のスコープ内のコールバックのみをアクティブにすることです。それは閉鎖の範囲と関係がありますが、私が求めている動作を取得する方法がわかりません...
静的クラスを通常のクラスに変換してから、コンストラクターを介して2つのクラスに渡そうとしましたが、それでも同じ問題が発生します...
だから私の質問は、クラスにすべてのコールバックを発生させる方法です
- 編集 -
これは、実際のアプリで発生しているのと同じ問題を示す例です。より明確な例を示すために、すべてのスクリプト コードをページに配置しました。
http://www.grofit.co.uk/other/pubsub-test.html
これは、2 人のプレゼンターと 2 つのビューを備えたシンプルなアプリです... 1 つのビューは、ページの上部にある 2 つの数値を加算することに関係し、2 つ目のビューは、その合計を取得して乗算し、結果を表示することに関係しています。
私が使用しているサードパーティ ライブラリはPubSubJSで、最初のプレゼンターはイベントをリッスンして、ボックスの 1 つが変更されたことを通知し、一番上の行を再合計します。2 番目のプレゼンターは、一番上の乗算または合計がいつ変化するかをリッスンし、一番下のものを再計算します。ただし、最初のプレゼンターは正しく再計算され、2 番目のプレゼンターは乗算ボックスが変更されるたびに正しく再計算されます。通知を受信する必要があるとはいえ、上部の合計が変更されても再計算されません...
とにかく、ページのソースコードをざっと見て、私が何を意味するかを確認してください...