GWT MVP - поддержка нескольких дисплеев, которые отделены друг от друга - PullRequest
7 голосов
/ 04 мая 2011

У меня есть приложение GWT, и я использую GWT MVP с Местами / Действиями.

Мой макет приложения похож на

МЕНЮ | СОДЕРЖАНИЕ

Отображение меню и содержимого будет динамически изменяться, и одно изменяется отдельно от другого. Под этим я подразумеваю, что при изменении отображения содержимого мне не нужно обновлять отображение меню и наоборот. Оба дисплея должны иметь возможность отвечать на PlaceChangeEvents и обновлять себя, когда это происходит. Проблема состоит в том, что каждый дисплей должен обновляться только в ответ на определенные PlaceChangeEvents, игнорируя PlaceChangeEvents, которые направлены на другой дисплей. Однако это не работает с использованием «стандартного» шаблона GWT MVP, потому что даже когда у каждого дисплея есть свой собственный ActivityManager, они автоматически подберут ВСЕ PlaceChangeEvents, потому что есть единственный PlaceController, прослушивающий один EventBus. Единственный способ, которым я могу убедиться в этом, - это иметь два EventBus и два PlaceController - один для Меню и один для Контента. Таким образом, мой вопрос заключается в том, является ли это хорошим решением или есть более простой / лучший способ, который мне не хватает? Одна проблема с этим решением состоит в том, что PlaceHistoryHandler может быть зарегистрирован только с одним из EventBus.

1 Ответ

5 голосов
/ 04 мая 2011

Изменения мест фактически контролируются ActivityMappers.Они получают место и возвращают соответствующую активность.Здесь вы контролируете, как Места отображаются на Действия:

  1. Вам необходимо создать два ActivityMappers (MenuActivityMapper, ContentActivityMapper), а затем создать два экземпляра ActivityManager, каждый со своими собственными ActivityMappers.Затем для каждого ActivityManager вы вызываете setDisplay(AcceptsOneWidget display), где для каждого вы переходите в область (дисплей), где будет отображаться его содержимое.

  2. Для меню вы, вероятно, будете использовать только одну активность, посколькуэто доступно во всех Местах.Так что MenuActivityMapper.getActivity() всегда будет возвращать один и тот же экземпляр MenuActivity.Чтобы позволить MenuActivity по-прежнему адаптировать свой внешний вид на основе изменений места, MenuActivity должна прослушивать PlaceChangeEvents.

...