我的页面中有一个表单。当用户点击按钮时如果没有问题,此代码必须导航我的Tile
页面。我正在解决这个问题:Uncaught TypeError: Cannot read property 'navTo' of undefined
。
这是我的代码:
onPressGonder: function (evt) {
var sURL = "xxxxxx";
$.ajax({
url: sURL,
dataType: "json",
success: function(data) {
if (data.ResultCode === 7) {
sap.m.MessageToast.show("Error:" +data.Alerts[0].Message+"") ;
} else {
sap.m.MessageToast.show("Login succesfull.");
sap.ui.core.UIComponent.getRouterFor(this).navTo("Tile");
}
}
});
}
答案 0 :(得分:0)
您遇到了范围问题。作为成功回调提供的函数是jQuery.ajax稍后调用的匿名函数。因此,它不是您的控制器的方法,因此不知道this
。默认情况下(如在匿名函数中)this
引用window
对象。所以你基本上做的是:
sap.ui.core.UIComponent.getRouterFor(window).navTo("Tile");
window
对象显然没有路由器或navTo方法;)
最简单的解决方法是通过closure范围提供this
,如下所示:
onPressGonder: function (evt) {
var sURL = "xxxxxx",
that = this;
$.ajax({
url: sURL,
dataType: "json",
success: function(data) {
if (data.ResultCode === 7) {
sap.m.MessageToast.show("Error:" +data.Alerts[0].Message+"") ;
} else {
sap.m.MessageToast.show("Login succesfull.");
sap.ui.core.UIComponent.getRouterFor(that).navTo("Tile");
}
}
});
}
另一个可能更优雅的解决方案是使用jQuery.ajax的context
属性。它将确保使用提供的上下文执行任何ajax回调(意味着您在回调中将任何传递给上下文的内容称为this
):
$.ajax({
...
success: function(data) {
...
sap.ui.core.UIComponent.getRouterFor(this).navTo("Tile");
},
context: this
});