後でイベントで起動できるコールバックを格納する関数をセットアップしようとしていますが、コンテキストが正しくバインドされていません。セットアップは基本的に次のようになります。
app.myObject = function(){
this.bindEvents();
};
app.myObject.prototype = {
bindEvents: function(){
var self = this;
this.library = new OutsideLibrary();
this.library.onMyEvent = function(data) {
OtherLibrary.processData(data, self.runCallback); // I'm not able to pass a context here...
}
},
sendToLibrary: function(message,callback) {
this.callback = callback;
this.library.send(message);
}
// ... and this doesn't work because it gets evaluated in the wrong context.
runCallback: function() {
if (this.callback) {
this.callback();
this.callback = null;
}
}
}
上記のコードが理にかなっていることを願っています。アイデアは、私が呼び出すことができるAPIを公開しようとしているということです。
app.myObject.sendToLibrary("something", function() {...});
...そして、チェーン全体が完了した後、コールバック関数が実行されます。
問題は、sendToLibrary
イベントが発生したときにコールバックを別のオブジェクトに渡す必要があるため、直接受信したコールバックを渡すことができないことです。また、現在渡されたコールバックを保存する必要があり、コールバックはオプションであるため、起動したら設定を解除する必要があります。実際にはrunCallback
、コールバックを実行する関数を渡してから設定を解除する必要があります。
とにかく、問題は、runCallback
最終的に実行されたときに、それがもはや正しいコンテキストにないため、機能しないことです。これを修正する方法についての私の最初のアイデアrunCallback
は、コンテキスト引数を含むように関数を変更することでした。これにより、パスできますself.runCallback(self)
が、すぐに実行されるため、目的が果たせなくなります。
とにかく、私はここのコールバックの森でちょっと迷っています、そして私の道を見つけるのにいくつかの助けをいただければ幸いです:)
私の質問は、コールバック関数と正しいコンテキストを今すぐ実行せずにラップして、最終的に起動したときに正しいコンテキストから実行する方法はありますか?
ありがとう!