Domanda

In che modo i widget in GWT dovrebbero informare gli altri widget di aggiornarsi o eseguire qualche altra azione.

Dovrei usare sinkEvent / onBrowserEvent?E se sì, c'è un modo per creare eventi personalizzati?

È stato utile?

Soluzione

Ho risolto questo problema utilizzando il Modello dell'osservatore e uno centrale Controllore.Il controller centrale è l'unica classe che conosce tutti i widget nell'applicazione e determina il modo in cui si incastrano.Se qualcuno cambia qualcosa sul widget A, il widget A attiva un evento.Nel gestore eventi chiami il controller centrale tramite la chiamata 'notifyObservers()', che informa il controller centrale (e facoltativamente altri, ma per semplicità non entrerò in questo argomento) che una determinata azione (passando un'istanza di enumerazione 'MyEvent' ) è successo.

In questo modo, la logica del flusso dell'applicazione è contenuta in un'unica classe centrale e i widget non necessitano di una serie di riferimenti tra loro.

Altri suggerimenti

È una domanda molto aperta: ad esempio, potresti creare la tua classe di gestore di eventi statici a cui i widget si iscrivono.per esempio:

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

Dove customEventHandler tiene traccia di tutti i widget che si iscrivono a ciascun evento denominato e chiama il metodo update sulla classe denominata, che potrebbe quindi chiamare eventuali metodi aggiuntivi desiderati.Potresti voler chiamare l'annullamento dell'iscrizione nel distruttore, ma potresti renderlo fantasioso quanto vuoi.

Quindi ecco la mia (esempio) implementazione, prima creiamo un nuovo evento:

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

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

Quindi creiamo un'interfaccia del gestore eventi:

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

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

Se ora abbiamo un widget che implementa la notificaHanlder, possiamo attivare l'evento chiamando:

((NotificationHandler)widget).onNotification(event);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top