2017-01-30 39 views
0

我有一个SAP UI5应用程序,我想显示一个框,当用户试图通过我的应用程序外部的方法(点击链接,手动更改URL等)从屏幕导航时出现一个框。我在哪里放置WindowBeforeUnload?

我看到有一个onWindowBeforeUnload()方法,但我不知道我把这个方法或它如何被调用。我尝试将它包含在我的控制器中,我希望使用该功能,但当我离开时它不会被调用。如果还有其他功能可以提供这种行为,那也可以。

这是我在我的控制器那样:

onWindowBeforeUnload: function() { 
    alert("you sure?"); 
}, 

我看,这是组件类的方法,但我认为这是在创建之初;我对这个概念不太熟悉。

回答

1

我不认为你可以直接从你的控制器覆盖它。您必须在窗口对象本身覆盖它(如上面的@ matt-spinks'答案),或者在Component.js文件(如果使用的话)上覆盖它。

这里是如何做到这一点的Component.js文件:

sap.ui.define(["sap/ui/core/UIComponent"], function (UIComponent) { 
    "use strict"; 
    return UIComponent.extend("company.main.Component", { 
     // ... 
     // ... 

     /** 
     * Fired before the window closes or moved to another URL 
     */ 
     onWindowBeforeUnload: function(oEvent) { 
      // your code 
     }, 

     /** 
     * Fired when the window is closed. 
     */ 
     onWindowUnload: function(oEvent) { 
      // your code 
     } 
    }); 
}); 
+0

你想知道如何在一定的视图下调用该函数吗?我有一个主要的细节类型的应用程序。无论何时他们点击主人的物品,详细视图都会显示有关该物品的更多信息。我希望详细视图有这种行为。 – Developer

+0

我实际上并不需要立即为某个视图,您展示的示例工作正常,谢谢!如果您确实知道如何检查我所在的视图,但它会有所帮助。 – Developer

+0

获取当前视图有点棘手。我通常做的是获取当前的URL哈希值,然后找出在哈希上使用的路由。您可以通过以下方式获取您在清单中定义的路线: ' var aAllRoutes = this.getManifestEntry(“/ sap.ui5/routing/routes”) ' – tapsiturbi

1

有这样做的几种不同的方法:在你的js代码

body标签

<body onbeforeunload='alert("no!!")'>

<script> 
    window.onbeforeunload = function() { 
     alert('no!!'); 
    } 
</script> 

确保使用window.onbeforeunload,而不是onWindowBeforeUnload

此外,请确保您将代码放置在页面的呈现输出中的标签内,或放入包含的JavaScript文件中。根据您的代码的外观,听起来您正在使用JavaScript库,这就是您使用functionName: function(){ //body }的原因。您不能使用该方法来覆盖window.onbeforeunload函数,因为您正在尝试处理窗口子节点内的函数。您必须使用顶层窗口节点并处理那里的功能。你可以通过将代码直接放在<script>标签或body标签中来实现。

+0

您的JS代码例如,在究竟我把那?你写它的方式使它看起来像我写在另一个函数内。我定义的每个其他函数在我的控制器'functionName:function(){// body}中有以下语法,' – Developer

+0

也许我们需要一点上下文。以我的例子来说,你可以将代码放在页面呈现的输出中的'