Frage

In GXT sind MessageBox Methoden asynchron, was bedeutet, dass die Anwendung nicht „einsperren“, während das Meldungsfeld angezeigt wird.

ich einen KeyListener mit Tastendrücken in einer Form zu verarbeiten eingeben (Usability zu erhöhen, das heißt, so dass die Form durch die Enter-Taste vorgelegt werden) und anschließend die Formularfelder zu deaktivieren, während die Anwendung Anmeldeinformationen des Benutzers verarbeitet. Wenn sie falsch sind, zeigen, dass ich ein MessageBox.alert() und dann wieder aktivieren Sie die Formularfelder. Da jedoch alert() sofort zurückkehrt, werden die Formularfelder sofort wieder zur Verfügung gestellt, den Benutzer zur Eingabe von Daten ermöglicht, ohne die Warnung zu schließen.

Die Lösung besteht darin, einen Rückruf in alert() zu verwenden; Allerdings führt die Eingabe keypress nicht nur das Formular abzuschicken, sondern verursacht auch die Warnung sofort zu entlassen (wie, wenn sowohl die Form und das Meldungsfeld verarbeiten die Enter-Taste). Wie halte ich das Warnfeld geöffnet, bis der Benutzer drückt ein zweites Mal oder klickt auf die Schaltfläche „Ok“ geben?

War es hilfreich?

Lösung

Der Schlüssel ist DeferredCommand von GWT :

  

Diese Klasse ermöglicht es Ihnen, Code auszuführen, nachdem alle aktuell anstehenden Event-Handler abgeschlossen haben, die addCommand(Command) oder addCommand(IncrementalCommand) Methoden. Dies ist nützlich, wenn Sie Code außerhalb des Kontexts des aktuellen Stack ausführen müssen.

if(!validate())
{
    DeferredCommand.addCommand(new Command() {
        public void execute() {
            MessageBox.alert("Error", "You must enter a username and password.", alertListener);
            return;
        }
    });
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top