SAPUI5使用sap.ui.controller中的自定义函数

时间:2015-02-19 21:22:58

标签: function router sapui5

我试图访问另一个函数调用的函数内的路由器,错误信息是:

Uncaught TypeError: Cannot read property 'navTo' of undefined
sap.ui.controller.loginSuccess
request.onreadystatechange

我创建了一个JSON模型来连接我的服务器以验证用户身份,当我成功进行身份验证时,我从控制器调用loginSuccess。

在控制器内部,我尝试让路由器在我的页面中导航。

login:function(){
    var login = new Login();

    login.loginAuth(
            this.byId("user").getValue(), 
            this.byId("passwd").getValue(), 
            this.loginSuccess, this.loginError );

    this.clear();

},

loginSuccess: function(type){
    var router = sap.ui.core.UIComponent.getRouterFor(this);
    if(type == "TIPO 1")
        router.navTo("MainPage", false);
    if(type == "TIPO 2")
        router.navTo("SupportMainPage", false);
    if(type == "TIPO 3")
        router.navTo("ManagerMainPage", false);
},

为什么我无法在此功能中访问控制器的方法? 我试图访问this.getView()并且也不起作用。

我该如何解决这个问题?

由于

1 个答案:

答案 0 :(得分:1)

this指针不再指向您的控制器。我想它指向您的Login()实例或window。要解决这个问题,您有几种选择:

login:function(){
    var login = new Login();
    login.loginAuth(
            this.byId("user").getValue(), 
            this.byId("passwd").getValue(), 
            $.proxy(this.loginSuccess, this), this.loginError );

    this.clear();
},

$ .proxy函数确保this指向第二个参数,即您的控制器。另一个经常使用的模式是在loginAuth函数中添加一个this范围的参数,并将其称为:

login.loginAuth(
            this.byId("user").getValue(), 
            this.byId("passwd").getValue(), 
            this.loginSuccess, this.loginError, this);

您的loginAuth函数在内部调用给定的回调,如下所示:

loginSuccess.call(scope, type);