Javascript ExtJS4回调

Javascript ExtJS4回调,javascript,extjs,extjs4,extjs4.1,extjs4.2,Javascript,Extjs,Extjs4,Extjs4.1,Extjs4.2,我费了好大劲才找到我的作业丢失的原因,发现回调的范围和我想象的不一样 我所做的是在控制器中创建一个变量,然后尝试将回调传递给控制器创建的窗口,然后在该窗口上的事件上,回调控制器中的函数 例如,在我的控制器中,我有: callWindow: function(){ var myWin = Ext.Create('MyApp.view.myWin', {doSomething: this.doSomething}); }, doSomething: function(data){ this

我费了好大劲才找到我的作业丢失的原因,发现回调的范围和我想象的不一样

我所做的是在控制器中创建一个变量,然后尝试将回调传递给控制器创建的窗口,然后在该窗口上的事件上,回调控制器中的函数

例如,在我的控制器中,我有:

callWindow: function(){
  var myWin = Ext.Create('MyApp.view.myWin', {doSomething: this.doSomething});
},

doSomething: function(data){
  this.myData = data;
},

useTheData: function(){
  console.log(this.myData);
}
在myWin的控制器中,我有一个偶数处理程序,它以这种方式调用doSomething:

onBtnClick: function(button){
  var win = button.up('window');
  var data = {id: 1, name: "John"}; // please, don't pay attention to this, it's a record I'm passing to the caller.
  win.doSomething(data);
}
正如您所看到的,在“doSomething”函数中,我使用窗口控制器传递的值分配控制器var myData。最初我认为“doSomething”的作用域是调用方控制器,但它是窗口的控制器,这就是为什么useTheData会给出这样一个错误:myData为null

我通过传递一个名为“caller:this”的新参数解决了这个问题,在doSomething中,接收该参数,并使用它代替“this”


问题是,有没有一种简单(步骤更少)的方法可以做到这一点?

您需要为回调窗口应用一个范围并使用


这是一种方法,你的解决方案是另一种,还有更多。

@leonardorame是的,你是。您的函数在窗口的范围内执行,并且您应用控制器实例作为引用。我的函数在控制器范围内执行,因此您可以使用“this”作为示例。
[data]
是arrayI删除我最后一条评论的参数,因为我没有看到Ext.callback调用。我将把你的答案记为正确答案。谢谢你。@leonardorame如果你需要一个范围回调,你没有那么多方法。另一个变量是
Ext.isFunction(myFunc)和&myFunc.apply(这个[arg1,arg2])
但这和我看到的
Ext.callback
@leonardorame差不多。因此,将最后一种方法作为另一种方法,而不使用Ext.callback包装器
callWindow: function(){
  var myWin = Ext.Create('MyApp.view.myWin', {doSomething: this.doSomething, scope: this});
},

onBtnClick: function(button){
  var win = button.up('window');
  var data = {id: 1, name: "John"}; // please, don't pay attention to this, it's a record I'm passing to the caller.
  Ext.callback(win.doSomething, win.scope, [data]);
}