ClickHandler на существующий элемент в GWT - PullRequest
8 голосов
/ 20 мая 2010

У меня есть HTML-документ. В этом документе есть элемент (например, button, div, a) с идентификатором. Я знаю, что могу использовать:

Document.get().getElementById("id");

чтобы найти необходимый элемент в файле HTML. Как я могу добавить обработчик кликов к нему? Кажется, что ClickHandlers доступны только в классе Button.

Спасибо

Ответы [ 4 ]

17 голосов
/ 20 мая 2010

Если вы пытаетесь добавить ClickHandler к <button>, вы можете сделать это с помощью Button.wrap().

Для <a> вы можете использовать Anchor.wrap() (Anchor s имеет только ClickListener s, но не ClickHandler s ... пока)

Для <div> вы можете использовать Label.wrap() (Label с просто <div> с).

4 голосов
/ 20 мая 2010

Предложение: Попробуйте научиться использовать UiBinder (добавлено в GWT 2.0).

В вашем случае вы могли бы сделать:

yourView.ui.xml

...
<g:Button ui:field="btnName" />
...

yourView.java

public class yourView extends Composite {
    interface MyUiBinder extends UiBinder<LayoutPanel, yourView> {}
    private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);

    @UiField Button btnName;

    public yourView() {
        initWidget(uiBinder.createAndBindUi(this));
    }

    @UiHandler("btnName")
    void handleClick(ClickEvent e) {
        //Do whatever
    }
}

С помощью "@UiHandler" вы можете добавить любой обработчик, который может поддерживать виджет (реализует Has **** Handler). Добавить другой элемент в эту структуру легко и быстро, и вы можете добавить любой обработчик к нему. @UiField создает переменную, содержащую экземпляр элемента, которым можно манипулировать в любом месте вашего класса.

1 голос
/ 15 ноября 2012

Еще одно предложение - используйте GQuery. Это облегчает присоединение простого слушателя событий к DOM без создания дополнительных элементов, которые часто делают виджеты GWT:

$("id").click(new Function() {
  public boolean f(Event e) {
    Window.alert("This is GWT code without widget baggage!");
    return true;
  }
});

Подробнее см. Здесь: http://code.google.com/p/gwtquery/wiki/GettingStarted#Add_an_event_handler

Жаль, что нет более прогрессивного кода на основе GWT. ИМХО, CSS / HTML отлично справляются с дизайном / разметкой - это просто Javascript, который я хочу заменить.

0 голосов
/ 16 февраля 2016

Просто сделайте это, установив прослушиватель событий.

Event.sinkEvents(e, Event.ONCLICK);
Event.setEventListener(e, new EventListener() {
     @Override
     public void onBrowserEvent(Event event) {
          Window.alert("Clicked!");
     }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...