Страницы

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

понедельник, 25 ноября 2019 г.

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


В 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 ...
    }
});


В чем разница между этими способами? В каких случаях нужно использовать каждый из них? Каковы их недостатки и достоинства?
    


Ответы

Ответ 1



В первом случае все объекты класса 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. Надеюсь, что помог Вам.

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

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