在我的 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)
我尝试过但不起作用的事情:
选项 3) 实际上会阻止导航,但会导致以后出现问题,因为 URL 仍然会更改...
有没有人有想法?
编辑:多亏了 cschuff 的回答,我才能让它工作。对于将来遇到同样问题的任何人:
// In onInit: …Run Code Online (Sandbox Code Playgroud)