2009-07-06 6 views
4

Y a-t-il un ordre connu pour le déclenchement de GWT EventHandlers?Ordre de déclenchement des GWT EventHandlers

ie. Si j'ai une classe qui étend ListBox et ajoute un EventHandler du constructeur, puis-je être sûr que ce gestionnaire sera appelé avant un autre gestionnaire qui est ajouté plus tard par une classe qui l'entoure?

De même, si une sous-classe prend le constructeur:

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

Mais la superclasse a le même constructeur qui ajoute une changeHandler:

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

Peut-on supposer l'ordre dans lequel ils seront déclenchés comme le constructeur de la superclasse a été appelé et ajouté le gestionnaire avant la sous-classe?

Merci beaucoup, cela m'a énervé.

Chris.

Répondre

4

La cuisson se produit dans l'ordre dans lequel les gestionnaires sont ajoutés. Cela n'est pas documenté dans le javadoc autant que je sache, mais je plonge dans le code GWT et la méthode com.google.gwt.event.shared.HandlerManager.HandlerRegistry.fireEvent (GwtEvent, boolean) finit par être appelée lorsqu'un événement se fait virer.

Dans certains cas, tous les événements sont déclenchés dans l'ordre inverse, mais cela ne semble pas lié aux principaux widgets. Si vous effectuez une hiérarchie d'appels sur com.google.gwt.event.shared.HandlerManager.HandlerManager (Object, boolean), vous verrez qui appelle HandlerManager avec l'activation inverse activée.

+0

Ah, oui! Vous pouvez voir ici com.google.gwt.event.shared.HandlerManager.HandlerRegistry.fireEvent pas à pas (événement GwtEvent , de isReverseOrder booléen) par un ArrayList de types eventHandler. Merci pour cela! –