Страницы

Поиск по вопросам

вторник, 2 октября 2018 г.

Способы подписки на события

В GWT подписаться на события можно несколькими способами. В частности, существуют следующие методы: addHandler(), addDomHandler(), addBitlessDomHandler() и методы для конкретных событий.
Кроме того, на события можно подписаться с помощью методов sinkEvents и onBrowserEvent
new SomeWidget() { { sinkEvents(Event.MOUSEEVENTS); // for example }
public void onBrowserEvent(Event event) { super.onBrowserEvent(event); int type = DOM.eventGetType(event); if (type == Event.ONMOUSEDOWN) { ... } else if ... } }
Если имеется не widget, а элемент, то можно подписаться на события так:
DOM.sinkEvents(element, Event.MOUSEEVENTS); DOM.setEventListener(element, new EventListener() { @Override public void onBrowserEvent(Event event) { int type = DOM.eventGetType(event); if (type == Event.ONMOUSEDOWN) { ... } else if ... } });
В чем разница между этими способами? В каких случаях нужно использовать каждый из них? Каковы их недостатки и достоинства?


Ответ

В первом случае все объекты класса SomeWidget будут "по умолчанию" иметь слушатель onBrowserEvent(Event event) и срабатывать на установленный Вами Event.MOUSEEVENTS. Во втором же случае, вышеперечисленные свойства будут относиться лишь к тем елементам, которые Вы укажете. Тоесть, в данном случае:
DOM.sinkEvents(someWidget1, Event.MOUSEEVENTS); DOM.setEventListener(someWidget1, new EventListener() {
@Override public void onBrowserEvent(Event event) { int type = DOM.eventGetType(event); if (type == Event.ONMOUSEDOWN) { ... } else if ... } });
DOM.sinkEvents(someWidget2, Event.ONCLICK); DOM.setEventListener(someWidget2, new EventListener() {
@Override public void onBrowserEvent(Event event) { int type = DOM.eventGetType(event); if (type == Event.ONMOUSEDOWN) { ... } else if ... } });
объекты someWidget1 и someWidget1 одного и того же класса, имеют разный event, в то время, как с использованием первого способа все объекты данного класса имели бы один и тот же event
Надеюсь, что помог Вам.

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

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