Pregunta

¿Cómo debería de widgets en GWT informar a los otros widgets para actualizar themselfs o realizar alguna otra acción.

Debo usar sinkEvent / onBrowserEvent?Y si es así ¿hay una manera de crear Eventos personalizados?

¿Fue útil?

Solución

Me han resuelto este problema mediante la Patrón Observer y un central Controlador de.El controlador central es la única clase que tiene conocimiento de todos los widgets de la aplicación y determina la forma en que encajan entre sí.Si alguien cambia algo en Un widget, widget de Una activa un evento.En el eventhandler llamar a la central de control a través de la 'notifyObservers()' llama, que informes el controlador central (y, opcionalmente, a los demás, pero por simplicidad no voy a entrar en eso) que una determinada acción (pasando de un 'MyEvent' enum ejemplo) se ha producido.

De esta manera, la aplicación de flujo de la lógica está contenida en una única central de la clase y los widgets no necesita un espagueti de referencias entre ellas.

Otros consejos

Es una pregunta abierta - por ejemplo, usted puede crear su propia estática clase de Controlador de eventos que los widgets de suscribirse a sí mismos.e.g:

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

Donde customEventHandler mantiene un registro de todos los widgets de la suscripción a cada evento con nombre, y se llama al método update en el nombre de la clase, para que pueda llamar a cualquier métodos adicionales que desee.Puede que desee llamar a darse de baja en el destructor - pero se podría hacer tan elegante como usted desea.

Así que aquí está mi (muestra) de la implementación, primero vamos a crear un nuevo evento:

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

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

Luego vamos a crear un controlador de eventos de la interfaz:

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

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

Si ahora tenemos un widget de la aplicación de la NotificationHanlder, podemos activar el evento llamando al:

((NotificationHandler)widget).onNotification(event);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top