2017-01-30 6 views
0

Ich habe eine SAP-UI5-Anwendung und ich möchte ein Feld anzeigen, das angezeigt wird, wenn der Benutzer versucht, durch Methoden außerhalb meiner Anwendung (durch Klicken auf Links, manuelle Änderung der URL usw.) vom Bildschirm weg zu navigieren.Wo setze ichWindowBeforeUnload ein?

Ich sehe, es gibt eine onWindowBeforeUnload() Methode, aber ich bin mir nicht sicher, wo ich diese Methode oder wie es genannt wird. Ich habe versucht, es in meinem Controller zu integrieren, dass ich die Funktionalität will, aber es wird nicht aufgerufen, wenn ich weg navigiere. Wenn es irgendeine andere Funktion gibt, die dieses Verhalten bereitstellen kann, wird das auch in Ordnung sein.

Hier ist, was ich in meinem Controller tat

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

Ich sehe, dass dies ein Verfahren der Komponentenklasse ist, aber ich dachte, das am Anfang erstellt wurde; Ich kenne dieses Konzept nicht sehr gut.

Antwort

1

Ich glaube nicht, dass Sie es direkt von Ihrem Controller überschreiben können. Sie müssen es entweder auf dem Fensterobjekt selbst überschreiben (wie in der obigen Antwort von @ matt-spinks) oder es in Ihrer Datei Component.js überschreiben (falls Sie eine verwenden).

Hier ist, wie es auf der Component.js zu tun, Datei:

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

Und wüsstest du, wie ich diese Funktion nur aufrufen könnte, wenn sie auf einer bestimmten Ansicht ist? Ich habe eine Master-Detail-Art der Anwendung. Wenn sie auf ein Element im Master klicken, werden in einer Detailansicht weitere Informationen zu diesem Objekt angezeigt. Ich möchte, dass die Detailansicht dieses Verhalten aufweist. – Developer

+0

Ich brauche es eigentlich nicht sofort für eine bestimmte Ansicht, das Beispiel, das du gezeigt hast, hat gut funktioniert, danke! Wenn du weißt, wie ich überprüfe, auf welcher Seite ich bin, wird es hilfreich sein. – Developer

+0

Das Erhalten der aktuellen Ansicht ist ein bisschen knifflig. Normalerweise erhalte ich den aktuellen URL-Hash und erkläre dann die Route, die für diesen Hash verwendet wird. Sie können die Routen, die Sie in Ihrem Manifest definiert haben, über folgende Adresse abrufen: ' var aAllRoutes = this.getManifestEntry ("/sap.ui5/routing/routes ") ' – tapsiturbi

1

Es gibt ein paar verschiedene Möglichkeiten, es zu tun:

im Body-Tag

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

in Ihrem js Code:

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

Stellen Sie sicher, window.onbeforeunload zu verwenden und nicht onWindowBeforeUnload.

Stellen Sie außerdem sicher, dass Sie den Code innerhalb von Tags in die gerenderte Ausgabe Ihrer Seite oder in eine enthaltene JavaScript-Datei einfügen. Basierend auf Ihrem Code sieht es so aus, als würden Sie eine Javascript-Bibliothek verwenden, weshalb Sie functionName: function(){ //body } verwenden. Sie können diese Methode nicht zum Überschreiben der window.onbeforeunload-Funktion verwenden, da Sie versuchen, die Funktion in einem Unterknoten des Fensters zu handhaben. Sie müssen den obersten Fensterknoten verwenden und dort die Funktion bearbeiten. Und Sie können das tun, indem Sie diesen Code direkt in <script> Tags oder das body-Tag setzen.

+0

für Ihr js Code Beispiel, wo genau kann ich das aufgeben? Die Art, wie du es geschrieben hast, lässt es so aussehen, als würde ich in eine andere Funktion schreiben. Jede andere Funktion, die ich definiert habe, hat die folgende Syntax in meinem Controller 'functionName: function() {// body},' – Developer

+0

Vielleicht brauchen wir ein bisschen Kontext. In meinem Beispiel würden Sie den Code in '