2009-07-06 4 views
4

Gibt es einen bekannten Auftrag zum Abfeuern von GWT EventHandlers?Firing Order von GWT EventHandlers

dh. Wenn ich eine Klasse habe, die ListBox erweitert und einen EventHandler aus dem Konstruktor hinzufügt, kann ich sicher sein, dass dieser Handler vor einem anderen Handler aufgerufen wird, der später von einer umgebenden Klasse hinzugefügt wird?

Ebenso, wenn eine Unterklasse nimmt den Konstruktor:

Subclass() { 
    super(); 
    addChangeHandler(new ChangeHandler() { 
     // ... 
    }); 
} 

Aber die übergeordnete Klasse hat den gleichen Konstruktor, der eine change fügt hinzu:

Superclass(){ 
    addChangeHandler(new ChangeHandler() { 
     // ... 
    }); 
} 

Können wir davon ausgehen, in welcher Reihenfolge werden sie ausgelöst werden wie der Konstruktor der Oberklasse aufgerufen wurde und der Handler vor der Unterklasse hinzugefügt wurde?

Vielen Dank, das hat mich rätselhaft gemacht.

Chris.

Antwort

4

Die Auslösung erfolgt in der Reihenfolge, in der die Handler hinzugefügt werden. Dies ist im Javadoc nicht dokumentiert, soweit ich es beurteilen kann, aber ich tauchte in den GWT-Code ein und die Methode com.google.gwt.event.shared.HandlerManager.HandlerRegistry.fireEvent (GwtEvent, boolean) wird schließlich bei einem Ereignis aufgerufen wird gefeuert.

In einigen Fällen werden alle Ereignisse in umgekehrter Reihenfolge ausgelöst, dies scheint jedoch nicht an die Haupt-Widgets gebunden zu sein. Wenn Sie eine Aufrufhierarchie unter com.google.gwt.event.shared.HandlerManager.HandlerManager (Object, boolean) ausführen, sehen Sie, wer den HandlerManager mit aktivierter Rückwärtszündung aufruft.

+0

Ah, ja! com.google.gwt.event.shared.HandlerManager.HandlerRegistry.fireEvent (GwtEvent Ereignis, boolean isReverseOrder) können Sie hier sehen, es durch eine Arraylist von Eventhandler-Typen treten. Danke dafür! –