在某些情况下,我需要覆盖Launchpad Header Back Button的事件。我尝试了很多类似的事情:
try {
sap.ui.getCore().byId("backBtn").attachPress(this, function(oEvent) {
oEvent.preventDefault();
}.bind(this));
} catch (err) {
console.log(err);
}
或
$('body').mousedown(function(e) {
var oTarget = $(e.target);
console.log(oTarget[0].offsetParent.id);
console.log(oTarget[0]);
if (oTarget[0].offsetParent.id === "backBtn") {
console.log("prevent");
e.preventDefault();
e.stopPropagation();
return false;
}
}.bind(this));
在这些代码中,我只是试图阻止导航,然后返回。没用在某些情况下,我想导航到某些视图。例如:
如果用户在视图3中->单击启动板后退按钮->导航到视图1(不是先前的导航目标)
但是我无法停止导航机制以返回到先前的目标。
我将不胜感激。
答案 0 :(得分:4)
首先,您需要在manifest.json中注册ShellUIService
在sap.ui5下的manifest.json中
...
"sap.ui5": {
...
"services": {
"ShellUIService": {
"factoryName": "sap.ushell.ui5service.ShellUIService"
}
}
...
}
...
然后您可以在控制器(或组件)中覆盖默认行为
this.getOwnerComponent().getService("ShellUIService").then(function(oShellService) {
oShellService.setBackNavigation(function() {
//either do nothing to disable it, or add your own back nav logic
})
})
答案 1 :(得分:0)
我过去无法阻止默认的Fiori shell(launchpad)操作。另一种方法可能是使用sap.ui.core.routing的Tensorflow Install和/或HashChanger(假设您已经在应用程序中使用了路由器)。
这不是非常优雅,但是您可以使用HashChanger的hashChanged
事件来确定您的条件是否得到满足(例如,当旧的hash =视图3的模式时),您可以触发Router.navTo("view1sRouteName")
。您还可以实例化Router sap.ui.core.routing
对象,以使用History.getDirection()
确定方向是向前还是向后。
确保您阅读了History和HashChanger的依赖项上的API,以便在正确的时间实例化。