2017-01-30 6 views
0

У меня есть приложение SAP UI5, и я хотел бы показать окно, которое появляется, когда пользователь пытается перейти от экрана с помощью методов вне моего приложения (щелчок по ссылкам, изменение URL вручную и т. Д.).Где я могу установить onWindowBeforeUnload?

Я вижу, есть метод 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

Есть несколько различных способов сделать это:

в теге

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

тела в коде JS:

<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

Возможно, нам нужно немного контекста. В моем примере вы помещаете код в теги '