49 votes

Comment utiliser le GWT EventBus

Je ne connais pas encore GWT et je me demande comment utiliser EventBus ou s’il existe de meilleures solutions pour envoyer un événement dans le cadre du projet.

Le widget 1 a un bouton. Le widget 2 a une étiquette, qui devrait changer lorsque j'appuie sur le bouton. Ces widgets sont dans un DockLayout:

     RootLayoutPanel rootLayoutPanel = RootLayoutPanel.get();
    DockLayoutPanel dock = new DockLayoutPanel(Unit.EM);

    dock.addWest(new Widget1(), 10);
    dock.add(new Widget2);

    rootLayoutPanel.add(dock);
 

J'ai déclaré un handleClickAlert dans le widget 1

 @UiHandler("button")
void handleClickAlert(ClickEvent e) {
    //fireEvent(e); 
}
 

J'espère que quelqu'un pourra m'aider. Merci!

105voto

Peter Knego Points 57985

Lorsque vous divisez le projet en parties logiques (par exemple avec MVP) que les différentes parties ont parfois besoin de communiquer. Typique de la communication est d'envoyer les changements de statut, par exemple:

  • utilisateur connecté / interjeté.
  • l'utilisateur en accédant directement via l'URL de la page si le menu doit être mis à jour.

En utilisant les événements de bus est tout à fait logique dans ces cas.

Pour l'utiliser, vous instanciez une EventBus par app qui est ensuite utilisé par toutes les autres classes. Pour atteindre cet utiliser des champs, de l'usine ou de l'injection de dépendance (GIN en cas de GWT).

Exemple avec vous propres types d'événements:

public class AppUtils{

    public static EventBus EVENT_BUS = GWT.create(SimpleEventBus.class);
}

Normalement, vous pouvez également créer vos propres types d'événements et des gestionnaires:

public class AuthenticationEvent extends GwtEvent<AuthenticationEventHandler> {

public static Type<AuthenticationEventHandler> TYPE = new Type<AuthenticationEventHandler>();

  @Override
public Type<AuthenticationEventHandler> getAssociatedType() {
    return TYPE;
}

@Override
protected void dispatch(AuthenticationEventHandler handler) {
    handler.onAuthenticationChanged(this);
}
}

et le gestionnaire:

public interface AuthenticationEventHandler extends EventHandler {
    void onAuthenticationChanged(AuthenticationEvent authenticationEvent);
}

Alors vous l'utiliser comme ceci:

AppUtils.EVENT_BUS.addHandler(AuthenticationEvent.TYPE, new AuthenticationEventHandler()     {
        @Override
        public void onAuthenticationChanged(AuthenticationEvent authenticationEvent) {
            // authentication changed - do something
        }
    });

et le feu de l'événement:

AppUtils.EVENT_BUS.fireEvent(new AuthenticationEvent());

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X