2010-07-13 1 views
2

У меня есть некоторые вопросы относительно GWT (2.1) с MVP и событиями.EventHandling в GWT с LayoutPanels

Got DockLayoutPanel с некоторыми компонентами в нем. Компонент дерева на западе и SimplePanel в центре. У каждого компонента есть презентатор и представление. Проблема в том, что я хочу обрабатывать события компонентов в классе презентаторов, но теперь они доступны только в контейнере, который является DockLayoutPanelPresenter. Я хочу обработать событие дерева s в TreePresenter. Я думаю, что TreePresenter должен обрабатывать свои события «SelectedItem», и он может помещать его в eventbus, чтобы мои другие компоненты могли реагировать на него.

С кем-нибудь еще сталкивались? Опубликован в списке групп GWT, но ответа не получил. Я думаю, что это важная тема для развязки компонентов.

+0

Можете ли вы уточнить свой дизайн немного больше? Итак, у вас есть TreePresenter, и вы привязали дерево к нему. Часть просмотра генерирует событие, и вы хотите поймать это событие в презентаторе? И что вы имеете в виду, когда говорите, что это только ловушка в контейнере? – igorbel

+0

Я набрал довольно обширный ответ в этой теме, где объяснил, как я решил отправить в моем приложении gwt. Может быть, это может вам помочь? http://stackoverflow.com/questions/2832779/is-there-a-recommended-way-to-use-the-observer-pattern-in-mvp-using-gwt/2832919#2832919 –

+0

Бананг уже дал вам лучшее ответ, имхо. Используйте шину событий, чтобы разные части вашего кода пользовательского интерфейса работали друг с другом, не зная друг о друге. Единственная * потенциальная * проблема с шиной событий - иметь очень чатное приложение, то есть слишком много событий, которые запускаются, и слишком много обработчиков должны реагировать. Беспокойство об этой проблеме, как только вы туда доберетесь. –

ответ

0

В этом случае, когда различные участки страницы, у каждого есть Presenter, вы могли бы использовать подход, предложенный Дэвидом Chandler из команды GWT:

http://groups.google.com/group/google-web-toolkit/browse_thread/thread/2812e1b15a2a98a6/8c82d629b7a48e56?lnk=gst&q=EastActivityMapper#8c82d629b7a48e56

Вы должны прочитать этот пост, но в резюме, вы могли бы сделать что-то вроде этого:

WestActivityMapper westActivityMapper = new WestActivityMapper(); 
WestActivityManager westActivityManager = new WestActivityManager(westActivityMapper, eventBus); 
westActivityManager.setDisplay(westPanel); 

EastActivityMapper EastActivityMapper = new EastActivityMapper(); 
EastActivityManager eastActivityManager = new EastActivityManager(eastActivityMapper, eventBus); 
EastActivityManager.setDisplay(eastPanel); 

dockLayoutPanel.addWest(westWidget, 50); 
dockLayoutPanel.addEast(eastWidget, 50); 
RootLayoutPanel.get().add(dockLayoutPanel); 

запада деятельности картографа будет отвечать за отображение дерева, и на востоке картограф будет содержать тело вашего приложения.

Мы используем этот подход для отображения списка элементов на нашей западной стыковочной панели (а не дерева, но достаточно близко), который затем обновляет то, что отображается в теле нашего приложения. Когда пользователь выбирает элемент из списка, мы запускаем новое событие Place и включаем идентификатор элемента списка в качестве Place Token, чтобы пользователь мог использовать кнопку «Назад». Однако вы также можете использовать EventBus, как вы указали.

 Смежные вопросы

  • Нет связанных вопросов^_^