2017-01-30 169 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

也許我們需要一點上下文。以我的例子來說,你可以將代碼放在頁面呈現的輸出中的'

  • 11. 我在哪裏放置整理條款?
  • 12. Wiki/Lua:我在哪裏放置模塊?
  • 13. 我應該在哪裏放置.htaccess?
  • 14. 我應該在哪裏放置scriptmanager
  • 15. MEF:我應該在哪裏放置CompositionContainer?
  • 16. em-http-request - 我在哪裏放置EventMachine.stop?
  • 17. 我在哪裏放置NaN代碼?
  • 18. 我應該在哪裏放置docker-compose.yml
  • 19. 我在哪裏放置if語句?
  • 20. MVC:我在哪裏放置定製UICollectionCell
  • 21. 我在哪裏放置MuiThemeProvider組件?
  • 22. 我在哪裏放置意圖代碼?
  • 23. Workflow Foundation:我在哪裏放置數據?
  • 24. 我應該在哪裏放置界面?
  • 25. 我在哪裏放置ICommand的邏輯?
  • 26. 我在哪裏放置pom.xml文件?
  • 27. 我在哪裏放置API代碼?
  • 28. solr + haystack + django我在哪裏放置schema.xml?
  • 29. QT CREATOR - 我在哪裏放置/ NODEFAULTLIB:庫?
  • 30. 我應該在哪裏放置代碼?