Frage

Wie soll Widgets in GWT informieren andere Widgets themselfs zu aktualisieren oder eine andere Aktion auszuführen.

Sollte ich sinkEvent / onBrowserEvent? Und wenn ja, ist es eine Möglichkeit, benutzerdefinierte Ereignisse zu erstellen?

War es hilfreich?

Lösung

Ich habe dieses Problem gelöst mit dem Observer Pattern und einem zentralen Controller . Die zentrale Steuerung ist die einzige Klasse, die Wissen über alle Widgets in der Anwendung hat und bestimmt die Art, wie sie zusammenpassen. Wenn jemand etwas auf Widget A ändert sich, feuert Widget A ein Ereignis. Im Eventhandler rufen Sie die zentrale Steuerung durch die ‚notifyObservers ()‘ Anruf, der die zentrale Steuerung Informes (und optional andere, aber die Einfachheit halber werde ich nicht in dem), dass eine bestimmte Aktion (vorbei an einem ‚MyEvent‘ Enum-Instanz ) aufgetreten ist.

Auf diese Weise Anwendung Ablauflogik wird in einer einzigen zentralen Klasse enthalten und Widgets keine Spaghetti von Verweisen auf sie brauchen.

Andere Tipps

Es ist eine sehr offene Frage - zum Beispiel, können Sie Ihre eigene statische Event-Handler-Klasse erstellen können, welche Widgets zeichnen sich. z:

Class newMessageHandler {
    void update(Widget caller, Widget subscriber) {
        ...
    }
}

customEventHandler.addEventType("New Message", newMessageHandler);

Widget w;
customEventHandler.subscribe(w, "New Message");

...
Widget caller;

// Fire "New Message" event for all widgets which have
// subscribed
customEventHandler.fireEvent(caller, "New Message");

Wo customEventHandler den Überblick über alle Widgets hält an jede benannte Ereignis abonnieren, und ruft die Update-Methode für die Klasse mit dem Namen, der dann alle zusätzlichen Methoden aufrufen, könnten Sie wollen. Sie könnten abmelden in dem destructor nennen wollen -., Aber man könnte es so schick, wie Sie wollen

So, hier ist meine (Probe) Implementierung, lassen Sie uns zuerst ein neues Ereignis erstellen:

import java.util.EventObject;
import com.google.gwt.user.client.ui.Widget;

public class NotificationEvent extends EventObject {
    public NotificationEvent(String data) {
        super(data);
    }
}

Dann erstellen wir eine Event-Handler-Schnittstelle:

import com.google.gwt.user.client.EventListener;

public interface NotificationHandler extends EventListener {
    void onNotification(NotificationEvent event);
}

Wenn wir jetzt ein Widget die NotificationHanlder Umsetzung haben, können wir Auslöser der Veranstaltung durch den Aufruf:

((NotificationHandler)widget).onNotification(event);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top