我試圖設置一個函數,該函數存儲可以稍後在事件上觸發的回調,但是我沒有獲取綁定正確的上下文。設置基本上是這樣的:JS在傳遞之前綁定函數的上下文
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)
- 但它會立即執行,所以它會破壞目的。
無論如何,我有點失去了在這裏的回調樹林,並希望得到一些幫助尋找我的出路:)
我的問題是:有沒有辦法來結束一個回調函數和正確的上下文,而不是現在執行它,以便當它最終觸發時,它從正確的上下文中這樣做?
謝謝!
'我不能在這裏傳遞一個上下文'你不能使用'.call(context)'語法來調用'runCallback'嗎? – fardjad 2013-03-15 20:06:59
據我瞭解,'.call()'立即執行該函數,但我需要將它傳遞,尚未執行,以便'OtherLibrary'在完成它的東西時執行它。 – Andrew 2013-03-15 20:13:37