Документация для @UiHandler - PullRequest
       3

Документация для @UiHandler

23 голосов
/ 09 августа 2010

Я начал изучать использование GWT в сочетании с UiBuilder.Я немного озадачен тем, как можно использовать директиву @UiHandler(..) для создания простого кода обработки события, как записано в документации GWT :

@UiHandler("button")
void handleClick(ClickEvent e) {
  Window.alert("Hello, AJAX");
}

В этом случаеhandleClick используется.Как вы узнаете для каждого виджета GWT, какие методы могут быть созданы с помощью @UiHandler?Для некоторых вы также можете создать метод doClose().

Но что вы можете использовать, например, с ListBox для получения события, когда выбран элемент?Где в документации это можно увидеть?

Ответы [ 2 ]

33 голосов
/ 09 августа 2010

Параметр, который вы передаете аннотации @UiHandler, представляет собой имя соответствующего поля, которое вы хотите присвоить этому *Handler. Итак, в этом случае вы присваиваете ClickHandler для Button button (на самом деле, мы просто знаем имя поля).

Что касается того, как именно это работает - это часть магии GWT :) Я думаю, что, как и любой другой код, связанный с UiBinder (я думаю, что была презентация в Google IO, в которой был показан код, который генерирует UiBinder) время компиляции компилятор выясняет, что и куда идет. В этом примере: у нас есть Button button, и у нас есть @UiHandler аннотированный метод, который имеет ClickEvent параметр -> что должно означать, что это ClickHandler (обратите внимание, что имя метода не имеет значение). Итак, давайте добавим некоторый код во время компиляции (возможно, в конструкторе), который добавляет этот обработчик к кнопке. Если вы заинтересованы в более полном ответе - проверьте источник: D

Но что вы можете использовать, для Например, ListBox, чтобы получить событие предмет выбран? Где в документацию можно посмотреть?

В справочнике GWT API . В этом случае вы, вероятно, ищете ListBox.addChangeHandler . Но обычно вы не найдете там кода, связанного с @UiHandler - потому что он будет избыточным - вы всегда создаете @UiHandler методы одинаково:

  1. Вы отмечаете *Handler, который хотите добавить, скажем, ChangeHandler
  2. Он имеет void onChange(ChangeEvent event) - поэтому вашему методу требуется параметр ChangeEvent и он должен выглядеть следующим образом:

    @UiHandler("listBox")
    void whateverName(ChangeEvent event) {
        // ...
    }
    
1 голос
/ 21 декабря 2012

Возможно, ваша проблема в методе 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);  
}
...