Documentación para @UiHandler
Pregunta
Empecé a buscar usar GWT en combinación con UiBuilder. Estoy un poco desconcertado sobre cómo puedes usar el @UiHandler(..)
Directiva para hacer un código de manejo de evento simple como se escribe en el Documentación de GWT:
@UiHandler("button")
void handleClick(ClickEvent e) {
Window.alert("Hello, AJAX");
}
En este caso el método handleClick
se usa. ¿Cómo sabes para cada widget GWT qué métodos se pueden crear con @UiHandler
? Para algunos también puedes crear un doClose()
método.
Pero, ¿qué puedes usar con, por ejemplo, un ListBox
¿Para obtener un evento se selecciona un artículo? ¿En qué parte de la documentación puedo ver esto?
Solución
El parámetro que pasa al @UiHandler
La anotación es el nombre del campo apropiado que desea asignarlo *Handler
. Entonces, en este caso está asignando un ClickHandler
a un Button button
(en realidad, solo conocemos el nombre del campo).
En cuanto a cómo funciona exactamente esto, es parte de GWT Magic :) Supongo que, al igual que cualquier otro código relacionado con Uibinder (creo que hubo una presentación en Google IO, que mostró el código que genera Uibinder), en el momento de la compilación, el El compilador descubre qué va a dónde. En este ejemplo: tenemos un Button button
, y tenemos un @UiHandler
método anotado que tiene un ClickEvent
Parámetro -> que deber significa que es un ClickHandler
(Observe que el nombre del método no asunto). Así que agregemos algún código en el tiempo de compilación (en el constructor, probablemente) que agrega ese controlador al botón. Si está interesado en una respuesta más completa, consulte la fuente: D
Pero, ¿qué puedes usar con, por ejemplo, un
ListBox
¿Para obtener un evento se selecciona un artículo? ¿En qué parte de la documentación puedo ver esto?
En el Referencia de la API GWT. En este caso, probablemente esté buscando Listbox.addchangehandler. Pero generalmente no encontrarás @UiHandler
Código relacionado allí, eso es porque sería redundante, siempre construye el @UiHandler
Métodos de la misma manera:
- Revisas el
*Handler
que quieres agregar, diChangeHandler
Tiene un
void onChange(ChangeEvent event)
- Entonces, su método necesita unChangeEvent
parámetro y debería verse así:@UiHandler("listBox") void whateverName(ChangeEvent event) { // ... }
Otros consejos
Probablemente su problema esté en su método OnModuleload:
public void onModuleLoad()
{
HelloWorld helloWorld = new HelloWorld("BOTAO");
// Using this way @UiHandler will not work
//Document.get().getBody().appendChild(helloWorld.getElement());
// correct way
RootPanel.get().add(helloWorld);
}