Question

Comment les widgets dans GWT doivent-ils informer les autres widgets pour se rafraîchir ou effectuer une autre action?

Devrais-je utiliser sinkEvent / onBrowserEvent? Et si oui, existe-t-il un moyen de créer des événements personnalisés?

Était-ce utile?

La solution

J'ai résolu ce problème en utilisant le modèle Observer et un Contrôleur . Le contrôleur central est la seule classe à connaître tous les widgets de l'application et à déterminer la manière dont ils s'emboîtent. Si quelqu'un modifie quelque chose sur le widget A, le widget A déclenche un événement. Dans le gestionnaire d'événements, vous appelez le contrôleur central par l'intermédiaire de l'appel 'notifyObservers ()', qui informe le contrôleur central (et éventuellement d'autres, mais pour des raisons de simplicité, je n'entrerai pas dans cela) qu'une action donnée (en passant une instance d'énumération 'MyEvent' ) a eu lieu.

De cette façon, la logique du flux d’application est contenue dans une seule classe centrale et les widgets n’ont pas besoin de spaghetti de références les uns aux autres.

Autres conseils

C’est une question très ouverte. Par exemple, vous pouvez créer votre propre classe de gestionnaire d’événements statique à laquelle les widgets s’abonnent. par exemple:

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");

Où customEventHandler conserve une trace de tous les widgets abonnés à chaque événement nommé et appelle la méthode de mise à jour sur la classe nommée, qui peut ensuite appeler les méthodes supplémentaires de votre choix. Vous voudrez peut-être appeler un désabonnement dans le destructeur, mais vous pourrez le personnaliser autant que vous le souhaitez.

Voici donc mon implémentation (exemple), D'abord, créons un nouvel événement:

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

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

Ensuite, nous créons une interface de gestionnaire d'événements:

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

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

Si nous avons maintenant un widget implémentant NotificationHanlder, nous pouvons déclencher l'événement en appelant:

((NotificationHandler)widget).onNotification(event);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top