MVP в GWT. Сложные представления - PullRequest
2 голосов
/ 28 октября 2011

У вас есть вопрос об использовании mvp для сложных представлений. Предположим, у нас есть некоторый виджет с шаблонным дизайном (ListWidget), подобный этому:
image

Кнопки управления предоставляют функции для переключения между ContentPanel (просто обычная CellTable с данными) и DetailsPanel (здесь мы можем редактировать конкретную запись, это не модальный диалог)

DetailsPanel, в свою очередь, имеет такую ​​структуру image

Button1, Button2, Button3 должны работать только с DetailsPanel и изменять ActionPanel (ActionPanel - своего рода мастер, поэтому его содержимое должно быть полностью изменено после нажатия Button1, Button2 или Button3), но кнопки «Сохранить» и «Отмена» должны переместить нас обратно на ListWidget .

  1. Какой подход следует использовать для реализации описанных функций?
  2. Должен ли я использовать 2 разных менеджера ActivityManager с одним из них в главном контексте или нет?
  3. Как управлять и транслировать сообщения на зависимые панели в ListWidget? (Можно ли помещать обработчики в представления и просто помещать событие во внутренний eventBus для некоторых действий? Например, когда я сохраняю элемент в DetailsPanel, PreviewPanel должен измениться, и этот элемент должен быть сосредоточен в CellTable; и т.д.)
  4. Если мне следует использовать шаблон с двумя разными менеджерами ActivityManager, как именно мне следует обрабатывать поведение при изменении активности?

Спасибо, надеюсь, кто-нибудь мне поможет.

1 Ответ

1 голос
/ 18 ноября 2011

Я отвечаю на ваш вопрос, сначала с кратким объяснением, а затем поэтапно отвечая на ваши вопросы.

На уровне фреймворка у вас может быть класс, который реализует ValueChangeHandler, и установить его в журнале с использованием History.addValueChangeHandler(controller); при условии, что контроллер реализует обработчик изменения значения

Любой новый элемент, который вы поместите в историю с History.newItem("NameOfAction"), будет вызывать реализацию ValueChangeHandler, которая в этом случае будет controller Теперь в рамках реализации ValueChangeHandler вы можете

String token = event.getValue();
if (token.equals("NameOfAction")) {
    Call Appropriate presenter
}

Теперь поговорим о второй части фреймворка, презентатора и представлении реализации. Я предполагаю, что RootPanel является контейнером всех ваших виджетов пользовательского интерфейса. Вы можете создать отдельных докладчиков для каждого действия

presenter = new ActionPresenter(rpc, eventbus, new ActionView())

Обратите внимание, что я создаю представление и передаю докладчику, докладчик получает данные и создает представление с данными. Позже вы можете передать контейнер докладчику, чтобы показать все это в пользовательском интерфейсе.

Теперь о ваших конкретных вопросах

  1. MVP будет вашим лучшим выбором здесь. Статья о MVP здесь довольно хороша
  2. Я не вижу смысла использовать 2 менеджера активности, если ваш контейнер этих виджетов один и тот же
  3. EventBus был бы идеальным. Если вам нужно передать данные с событиями, переменная сеанса, такая как статические поля в основном классе, будет обслуживать вашу цель
  4. Мне нужно больше подробностей о том, что именно вы хотите поместить в какой менеджер

Надеюсь, это поможет!

...