C++ のバックグラウンドを持っているので、Javascript/ExtJS 関数の範囲設定、特にイベントを処理するときに少し迷っています。
さまざまなイベントをリッスンするコントローラーがあるとします。これらのイベントは、マネージド ビュー、ストア、アプリケーション レベルなどから発生する可能性があります。現在、正しいスコープを確保するために、次のようなことを行っています。
init: function() {
me.control({
'someSelector': {
someEvent: me.onSomeEvent.bind(me)
},
...
});
me.application.on({
applicationEvent: me.onApplicationEvent.bind(me)
});
},
onSomeEvent: function() {...},
onApplicationEvent: function() {...},
これは物事を進める正しい方法ですか?何が指されているのか具体的にわからない限り、this
内部onSomeEvent()
で使用するのが怖いです。考え?onApplicationEvent
this
編集:誤解を招く可能性がある場所を示すコードの例を次に示しますthis
。
init: function() {
this.control({
'uploadform *': {
formUpload: this.onFormUpload
}
});
},
onFormUpload: function(form) {
if(form.isValid()) {
var formData = form.getValues();
Ext.Ajax.request({
url: 'upload',
method: 'POST',
jsonData: {
form: formData
},
success: this.onFormUploadSuccess // here, this is the controller
});
}
},
onFormUploadSuccess: function() {
... // here, this isn't the controller
this.application.fireEvent('dealAdded'); // this.application === undefined!!
}