Launcpad标头后退按钮的事件处理程序

时间:2018-07-18 11:39:15

标签: javascript jquery sapui5

在某些情况下,我需要覆盖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(不是先前的导航目标)

但是我无法停止导航机制以返回到先前的目标。

我将不胜感激。

2 个答案:

答案 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,以便在正确的时间实例化。