我正在尝试设置一个存储回调的函数,该回调可以稍后在事件中触发,但我没有得到正确绑定的上下文。设置基本上是这样的:
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)
——但它会立即执行,所以它违背了目的。
无论如何,我有点迷失在这里的回调树林中,希望能得到一些帮助找到我的出路:)
我的问题是:有没有办法包装一个回调函数和正确的上下文,而不是现在执行它,以便当它最终触发它时,它会从正确的上下文中执行?
谢谢!