我试图访问另一个函数调用的函数内的路由器,错误信息是:
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()并且也不起作用。
我该如何解决这个问题?
由于
答案 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);