Sapui5 navTo 在 ajax 语句中不起作用
Sapui5 navTo not working in ajax statement
我的页面中有一个表单。当用户单击按钮时,如果没有问题,此代码必须导航我的 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");
}
}
});
}
您遇到范围问题。作为成功回调提供的函数是稍后由 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
});
我的页面中有一个表单。当用户单击按钮时,如果没有问题,此代码必须导航我的 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");
}
}
});
}
您遇到范围问题。作为成功回调提供的函数是稍后由 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
});