小编Ale*_*rtz的帖子

如何防止用户导航离开?

在我的 SAPUI5 应用程序中,我使用 sap.tnt.Toolpage 作为主布局容器。SideNavigation 显示应用程序链接列表,并且 mainContents 使用 sap.ui.core.routing.Router 动态加载。

导航到我正在使用的详细信息页面

var router = sap.ui.core.UIComponent.getRouterFor(this);
router.navTo("MyDetailRoute", {
    detailItemId: oItem.getBindingContext("oDataSourceName").getProperty("DETAILID")
});
Run Code Online (Sandbox Code Playgroud)

这将加载一个详细信息视图,然后将其控件绑定到我的数据源中的数据。

当我试图记住用户将他的更改保存回服务器时,问题就出现了。我基本上想中断导航以询问用户是否愿意 a) 取消他的更改,b) 保存他的更改或 c) 留在详细信息页面上。虽然 a) 和 b) 很容易实现,但我不知道如何防止导航发生。

到目前为止,我已经通过订阅 onBeforeHide 来尝试我的观点:

var view = this.getView();
var that = this;
view.addEventDelegate({
    onBeforeHide: function (evt) {
        var oModel = that.getModel("oDataSourceName");
        if (oModel.hasPendingChanges()) {
            // How to prevent leaving the page?
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

我尝试过但不起作用的事情:

  1. evt.preventDefault();
  2. evt.stopPropagation();
  3. 扔“东西”;

选项 3) 实际上会阻止导航,但会导致以后出现问题,因为 URL 仍然会更改...

有没有人有想法?

编辑:多亏了 cschuff 的回答,我才能让它工作。对于将来遇到同样问题的任何人:

// In onInit: …
Run Code Online (Sandbox Code Playgroud)

url-routing sapui5

5
推荐指数
1
解决办法
2596
查看次数

标签 统计

sapui5 ×1

url-routing ×1