Documentation pour @ UiHandler
J'ai commencé à chercher à utiliser GWT en combinaison avec UiBuilder. Je suis un peu perplexe sur la façon dont vous pouvez utiliser la directive @UiHandler(..)
pour créer un code de gestion d'événement simple comme écrit dans la documentation GWT :
@UiHandler("button")
void handleClick(ClickEvent e) {
Window.alert("Hello, AJAX");
}
Dans ce cas, la méthode handleClick
est utilisé.
Comment savez-vous pour chaque widget GWT quelles méthodes peuvent être créées avec @UiHandler
? Pour certains, vous pouvez également créer une méthode doClose()
.
, Mais que pouvez-vous utiliser avec, par exemple, un ListBox
pour obtenir un événement un élément est sélectionné? Où dans la documentation, puis-je voir cela?
2 réponses
Le paramètre que vous passez à la @UiHandler
annotation est le nom du champ que vous souhaitez assigner *Handler
. Donc, dans ce cas, vous assignez un ClickHandler
à un Button button
(en fait, nous connaissons juste le nom du champ).
Quant à la façon dont cela fonctionne exactement - cela fait partie de GWT magic:) ma conjecture est que, comme tout autre code lié à UiBinder (je pense qu'il y avait une présentation sur Google IO, qui montrait le code généré par UiBinder), au moment de la compilation, le compilateur comprend ce que va où. Dans cet exemple: nous avons un Button button
, et nous avons une méthode annotée @UiHandler
qui a un paramètre ClickEvent
- > que doit signifier que c'est un ClickHandler
(notez que le nom de la méthode n'a pas d'importance). Ajoutons donc du code au moment de la compilation (dans le constructeur, probablement) qui ajoute ce gestionnaire au bouton. Si vous êtes intéressé par une réponse plus complète-consultez la source: D
, Mais que pouvez-vous utiliser avec, pour exemple, un
ListBox
pour obtenir un événement article est sélectionné? Où dans le documentation puis-je voir cela?
Dans la référence API GWT . Dans ce cas, vous cherchez probablement ListBox.addChangeHandler . Mais vous ne trouverez généralement pas de code lié à @UiHandler
- c'est parce qu'il serait redondant - vous construisez toujours les méthodes @UiHandler
de la même manière:
- Vous cochez la
*Handler
que vous souhaitez ajouter, disonsChangeHandler
-
Il est un
void onChange(ChangeEvent event)
- donc, votre méthode a besoin d'unChangeEvent
paramètre et devrait ressembler à ceci:@UiHandler("listBox") void whateverName(ChangeEvent event) { // ... }
Probablement votre problème est dans votre méthode 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);
}