割り当てが失われた理由を突き止めるのに苦労しましたが、コールバックのスコープが思っていたものと異なっていることがわかりました。
私がしたことは、コントローラーで変数を作成し、コントローラーによって作成されたウィンドウにコールバックを渡そうとし、そのウィンドウのイベントでコントローラーの関数をコールバックすることでした。
たとえば、私のコントローラーには次のものがあります。
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 は this.myData が null であるというエラーを出します。
「caller: this」という名前の新しいパラメーターを渡し、doSomething でそのパラメーターを受け取り、「this」の代わりに使用することで問題を解決しました。
問題は、これを行うための簡単な (少ない手順で) 方法があるかどうかです。