ExtJS调用Ext.util.Observable.observe中的控制器方法

时间:2014-07-07 03:45:25

标签: extjs extjs4 extjs4.1 extjs4.2

我的4.2.1 ExtJS应用程序监听每个Ajax请求(Ext.data.Connection),这样我就可以进行自定义错误处理和其他工作。

我在Main Controller

中进行此操作
Ext.define('App.controller.Main', {
        extend: 'Ext.app.Controller',


        init: function (application) {

            var me = this;

            this.control({
                '[xtype=login] button#btnLogin': {
                    click: me.onLogin
                },
            });

            Ext.util.Observable.observe(Ext.data.Connection, {
                requestcomplete: function (conn, response, options) {
                    // Do stuff on success
                },
                requestexception: me.handleRequestException // Do stuff on failure
            });

        },
        handleRequestException: function (conn, response, options) {

            var me = this;

            if (response.status == 401) {

                // here i need to fire the logoutApplication method

                // have tried: me.fireEvent('logoutApplication');  but fireEvent is undefined because "me" scope is data.Connection
                // it doesnt know about the controller.

            }


        },
        logoutApplication: function () {
            var me = this;

            // do somestuff here!!

        }

handleRequestException函数内部我尝试me.fireEvent(...)fireEventundefined,因为该函数的scopedata.Connection。< / p>

想要使用:

var mainController = App.app.getController('App.controller.Main');

因为在调用时init被触发并且我遇到了两次事件触发的问题。

我是ExtJS的新人,所以我相信有更好的方法可以做到这一点。感谢任何建议。

1 个答案:

答案 0 :(得分:0)

您可以向侦听器配置添加scope

Ext.util.Observable.observe(Ext.data.Connection, {
     requestcomplete: function (conn, response, options) {
         // Do stuff on success
     },
     requestexception: me.handleRequestException, // Do stuff on failure
     scope: me // add the scope here
});

现在,您使用该范围而不是调用者范围执行侦听器。