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?

¿Fue útil?

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:

  1. Revisas el *Handler que quieres agregar, di ChangeHandler
  2. Tiene un void onChange(ChangeEvent event) - Entonces, su método necesita un ChangeEvent 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);  
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top