Поиск по этому блогу

среда, 14 мая 2014 г.

GWT. How to add Handler on DOM elements

Для того, чтобы в GWT прикрепить EventListener на простой DOM Element необходимо сделать следующее.
final Element element = selector.getInputElement();  
Event.sinkEvents(element, Event.ONKEYUP);
Event.setEventListener(element, new EventListener() {
 
    @Override
    public void onBrowserEvent(Event event) {
        if (Event.ONKEYUP == event.getTypeInt()) {
            Window.alert("ONKEYUP ");
        }
    }
});

Но так можно повесить слушатель только для одного события, для нескольких событий необходимо писать код следующим образом.
Event.sinkEvents(element, Event.ONKEYUP | Event.ONBLUR | Event.ONFOCUS);

Такое написание объясняется тем, что события являются битовыми константами.
/**
   * Fired when an element receives keyboard focus.
   */
  public static final int ONFOCUS = 0x00800;

Метод sinkEvents принимает итоговое значение битов.
public static void sinkEvents(Element elem, int eventBits) {
    // This cast is always valid because both Element types are JSOs and have
    // no new fields are added in the subclass.
    DOM.sinkEvents((com.google.gwt.user.client.Element) elem, eventBits);
}

И для прикрепления к элементу слушателя на несколько событий необходимо провести логическую операцию над используемыми событиями.
final Element element = selector.getInputElement();
Event.sinkEvents(element, Event.ONKEYUP | Event.ONBLUR | Event.ONFOCUS);
Event.setEventListener(element, new EventListener() {
 
 @Override
 public void onBrowserEvent(Event event) {
  if (Event.ONKEYUP == event.getTypeInt()) {
      Window.alert("ONKEYUP ");
      event.preventDefault();
  } else if (Event.ONBLUR == event.getTypeInt()) {
     Window.alert("ONBLUR ");
     event.preventDefault();
  } else if (Event.ONFOCUS == event.getTypeInt()) {
     Window.alert("ONFOCUS ");
     event.preventDefault();
  }
 }
});


Комментариев нет:

Отправить комментарий