1

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()で使用するのが怖いです。考え?onApplicationEventthis

編集:誤解を招く可能性がある場所を示すコードの例を次に示します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!!
}
4

1 に答える 1