在 Ext.Ajax.request 中调用父控制器函数

calling the parent controller function in Ext.Ajax.request

我有一个验证 user.On 正确用户名和密码的登录页面,它应该隐藏登录视图并显示下一个 view.When 我调用该函数来做同样的事情它给出了一个错误说 "Uncaught TypeError: this.functionname is not a function。这是我的代码:

    startMain : function() {
    Eits.store.DataStore.init();
    Eits.Factory.getAppController().start();
    },
    doLoginClicked : function() {
    console.log("button pressed this time");
    var name = this.view.getUsername();
    var pass = this.view.getPassword();
    console.log(name);
    console.log(pass);

        Ext.Ajax.request({
        url: 'login/getLoginStatus.action',
        method:'post',
        params: {
            user: name,
            password: pass
            }
            ,
            success: function(response) {

                console.log(response);

                var obj = Ext.decode(response.responseText);
                var nextObj=obj.data;
                console.log(nextObj);
                if (nextObj[0].success) {

                      console.log(nextObj[0].msg);
                    this.startMain();//Uncaught TypeError: this.startMain is not a function
                    this.view.hide();//
                    }
                else
                    {
                    console.log(nextObj[0].msg);    
                    }

            },
            failure: function(response,options,success) {
                console.log("inside failure");
                console.log(response);
                console.log(options);
                console.log(success);
                  Ext.Msg.show({
                        title:'Error!',
                        msg: response.text,
                        icon: Ext.Msg.ERROR,
                        buttons: Ext.Msg.OK
                    });
                }
        });
    }
   }

有没有办法调用函数并绕过它?

范围问题。当您在成功回调中调用 this 时,您不在定义 startMain 函数的同一范围内。

一个解决方案是在 doLoginClicked 函数内部声明对正确范围的引用:

doLoginClicked : function () {
var me = this;
console.log("button pressed this time");
...

然后在 Ajax 成功回调中,您可以将 this 替换为 me:

me.startMain();