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?

23
demandé sur Mogsdad 2010-08-09 18:03:36

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:

  1. Vous cochez la *Handler que vous souhaitez ajouter, disons ChangeHandler
  2. Il est un void onChange(ChangeEvent event) - donc, votre méthode a besoin d'un ChangeEvent paramètre et devrait ressembler à ceci:

    @UiHandler("listBox")
    void whateverName(ChangeEvent event) {
        // ...
    }
    
33
répondu Igor Klimer 2015-09-17 00:51:14

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);  
}
1
répondu Fabricio 2012-12-21 14:11:24