2009-04-10 5 views
0

Ich habe eine Web-App, die GXT (Version 1.2.2) Grids ausgiebig verwendet. Ich möchte den Benutzer warnen, wenn er Änderungen vornimmt, aber nicht speichert.Welche Ereignisse kann ich erfassen, wenn der Benutzer ein GXT-Gitter verlässt?

Wenn ich das Raster in einem Popup-Dialogfeld verwende, ist der einzige Weg für den Benutzer, über eine Schaltfläche zu gehen (entweder Schließen oder OK). Wenn ich der Schaltfläche Schließen einen SelectionListener hinzufüge, kann ich die Überprüfung "isDirty()" durchführen und den Benutzer warnen.

Wenn ich kein Dialogfeld verwende, ist die Einschränkung für das Verlassen der Seite nicht vorhanden. Der Benutzer kann auf ein Seitenmenü klicken, eine andere Registerkarte auswählen, auf eine Aktualisierungs- oder Nächste-Seite-Schaltfläche klicken, die wir auf jeder Seite haben. Ich könnte auf jeden von ihnen eine Veranstaltung hören, aber gibt es einen einfacheren Weg? Etwas wie ein "vor dem Entladen" -Event, das ausgelöst wird?

Antwort

0

Window.addCloseListener

Oder in GWT 1.6:

Window.addCloseHandler

Sie das Fenster vor der Schließung nicht verhindern können, aber Sie können den Benutzer auffordern, Abbrechen zu klicken, die die Seite offen lassen wird. Sie können auch eine Sicherungsoperation der letzten Chance ausführen, nachdem der Benutzer das Schließen des Fensters bestätigen möchte, aber bevor die Seite entladen wird.

+0

ich das versucht, aber es hat nicht funktioniert, ich nehme an, da das Fenster zu schließen ist nicht. Ich gehe nur zu einem anderen Raster oder Tab oder einer anderen Seite. – CoverosGene

+0

Ich verstehe. Wenn das Grid tatsächlich entladen wird, besteht Ihre einzige Hoffnung darin, die onDetach() -Methode auf dem Widget anzuhängen. Es gibt keinen Listener, also müssten Sie ihn innerhalb einer Unterklasse überladen. Wenn die Registerkarte geändert wird, aber das Raster bleibt verborgen, dann haben Sie völlig Pech und müssen auf alles hören. –

0

Versuchen Sie folgendes:

Window.addListener(Events.Close, 
    new Listener<ComponentEvent>() { 
      public void handleEvent(ComponentEvent be) { 
       //Do something 
      } 
}); 

oder

Window.addListener(Events.Detach, 
     new Listener<ComponentEvent>() { 
       public void handleEvent(ComponentEvent be) { 
        //Do something 
       } 
    }); 
Verwandte Themen