GWT пользовательский обработчик событий

Может кто-то давать мне пример создания пользовательского набора События и Обработчика. Скажите, что Вы сделали, чтобы Человек возразил, что Вы хотите, чтобы Ваши виджеты знали, было ли это обновлено.

Вы создаете HandlerManager, и теперь необходимо создать Событие и Обработчик. Как Вы определили бы те классы так, чтобы можно было подписать и запустить события?

Большинство Событий является базирующимся DOM, в то время как я хочу создать некоторые пользовательские события и обработчики, которые я могу запустить за пределами любого события на базе браузера.

43
задан Brian Tompsett - 汤莱恩 29 September 2019 в 08:05
поделиться

4 ответа

Вот довольно подробный пример создания настраиваемого события, дословно взятый из GwtEventSystem Wiki (когда система событий все еще находилась в инкубаторе GWT).

Это так. событие, которое запускается, когда пользователь становится счастливым.

Определите новый класс событий. Вы можете добавить произвольные метаданные в класс события. Для простоты мы не будем включать сюда ни одного.

public class HappyEvent extends GwtEvent {
  ...
}

Определите новый обработчик и интерфейс маркера для класса событий.

interface HappyHandler extends EventHandler {
  public void onHappiness(HappyEvent event);
}

interface HasHappyEvents {
  public HandlerRegistration addHappyHandler(HappyHandler handler);
}

Добавьте уникальный тип события

class HappyEvent extends AbstractEvent{
  public static AbstractEvent.Key KEY = new AbstractEvent.Key(){...}

  public GwtEvent.Key getKey(){
    return KEY; 
  }
  ...
}

Подключите метод fire обработчика

class HappyEvent extends GwtEvent {
  static Key<HappyEvent,HappyHandler> KEY = new Key<HappyEvent,HappyHandler>(){
    protected void fire(HappyHandler handler, HappyEvent event) {
       handler.onHappiness(event);
    };
   ...
}
23
ответ дан 26 November 2019 в 23:01
поделиться

Похоже, вам нужна поддержка PropertyChange *. Взгляните на gwtx . Погуглите "gwt PropertyChange", и вы получите несколько блогов, в которых объясняется, как его использовать.

0
ответ дан 26 November 2019 в 23:01
поделиться

Возможно, вы захотите взглянуть на ValueChangeHandler и ValueChangeEvent в GWT 1.6. Они могут сработать для того, что вы пытаетесь сделать.

0
ответ дан 26 November 2019 в 23:01
поделиться

Спасибо за все ответы. Закнесс подошел ближе всего к тому, чтобы дать мне нужный ответ, однако я придумал немного более простую модель.

Моей основной целью было избежать использования статической переменной в моей основной структуре данных. Я также столкнулся с проблемой, пытаясь выяснить, была ли эта основная структура данных успешно извлечена из базы данных во время попытки доступа к ней, и что делать, если это не так (т.е. когда она пуста).

После просмотра Google Web Toolkit Architecture: Best Practices For Architecting Your GWT App видео от Google IO, идея шины событий казалась идеальной.

I ' Я опубликую здесь свое решение на случай, если оно поможет кому-то еще.


Сначала создайте класс Handler. Обратите внимание на ссылку на класс Event:

public interface CategoryChangeHandler extends EventHandler {
    void onCategoryChange(CategoryChangeEvent event);
}

Теперь перейдем к классу Event. Это доставило мне больше всего проблем:

public class CategoryChangeEvent extends GwtEvent<CategoryChangeHandler> {

    private final List<Category> category;

    public CategoryChangeEvent(List<Category> category) {
        super();
        this.category = category;
    }

    public static final Type<CategoryChangeHandler> TYPE = new Type<CategoryChangeHandler>();

    @Override
    protected void dispatch(CategoryChangeHandler handler) {
        handler.onCategoryChange(this);
    }

    @Override
    public com.google.gwt.event.shared.GwtEvent.Type<CategoryChangeHandler> getAssociatedType() {
        return TYPE;
    }

    public List<Category> getCategories(){
        return category;
    }

}

Теперь я могу использовать эти классы Handler и Event так, когда перезагружается эта основная структура данных:

Этот код получил структуру данных и хочу уведомить всех, кто ее слушает. обновлено:

CategoryChangeEvent event = new CategoryChangeEvent(result);
eventBus.fireEvent(event);

Этот код является реализацией события

public class PopulateCategoryHandler implements CategoryChangeHandler {

    @Override
    public void onCategoryChange(CategoryChangeEvent event) {
        tearDownCategories();

        List<Category> categories = event.getCategories();
        populateCategories(categories); 
    }

}
31
ответ дан 26 November 2019 в 23:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: