来自 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!!
}