#java #gwt #mvp
#java #gwt #mvp
Вопрос:
У вас есть вопрос об использовании mvp для сложных представлений. Предположим, у нас есть некоторый виджет с шаблонным дизайном (ListWidget), подобный этому:
Кнопки управления обеспечивают функциональность для переключения между ContentPanel (просто обычная таблица ячеек с данными) и DetailsPanel (здесь мы можем редактировать конкретную запись, это не модальный диалог)
DetailsPanel, в свою очередь, имеет такую структуру
Button1, Button2, Button3 должны иметь дело только с DetailsPanel и изменять ActionPanel (ActionPanel какой-то мастер, поэтому его содержимое должно быть полностью изменено после нажатия Button1, Button2 или Button3), но кнопки Save и Cancel должны возвращать нас обратно в ListWidget.
- Какой подход я должен использовать для реализации описанной функциональности?
- Должен ли я использовать 2 разных ActivityManagers с одним из них в главном контексте или нет?
- Как управлять и передавать сообщения зависимым панелям в ListWidget? (Можно ли помещать обработчики в представления и просто отправлять событие во внутреннюю шину событий для некоторых действий? Например, когда я сохраняю элемент в DetailsPanel, панель предварительного просмотра должна измениться, и этот элемент должен быть сфокусирован в таблице ячеек; и т.д.)
- Если я должен использовать шаблон с двумя разными ActivityManagers, как именно я должен обрабатывать поведение изменения активности?
Спасибо, надеюсь, кто-нибудь мне поможет.
Комментарии:
1. groups.google.com/group/google-web-toolkit/browse_thread/thread / … может быть, это кому-нибудь поможет
2. Если вы хотите ответить на свой собственный вопрос, пожалуйста, не стесняйтесь это сделать! Однако, пожалуйста, по крайней мере, объясните смысл связанного текста (если ссылка прерывается, то же самое происходит и с ответом, если не указан контекст).
Ответ №1:
Я отвечаю на ваш вопрос, сначала с кратким объяснением, а затем по пунктам отвечаю на ваши вопросы.
На уровне фреймворка у вас может быть класс, который реализует ValueChangeHandler
и устанавливает его в истории, используя History.addValueChangeHandler(controller);
предположение, что контроллер реализует обработчик изменения значения
Любой новый элемент, который вы бы поместили в историю, History.newItem("NameOfAction")
вызвал бы реализацию ValueChangeHandler
, которая в этом случае была бы controller
теперь в рамках реализации ValueChangeHandler
you can
String token = event.getValue();
if (token.equals("NameOfAction")) {
Call Appropriate presenter
}
Теперь давайте поговорим о второй части реализации framework, presenter и view. Я предполагаю, что RootPanel является контейнером всех ваших виджетов пользовательского интерфейса. Вы можете создавать отдельных докладчиков для каждого действия
presenter = new ActionPresenter(rpc, eventbus, new ActionView())
Обратите внимание, что я создаю представление и передаю его ведущему, ведущий получает данные и создает представление с данными. Позже вы можете передать контейнер ведущему, чтобы показать все это в пользовательском интерфейсе.
Теперь о ваших конкретных вопросах
- MVP был бы вашим лучшим выбором здесь Статья о MVP здесь довольно хорошая
- Я не вижу причин использовать 2 менеджера активности, если ваш контейнер с этими виджетами одинаков
- EventBus был бы идеальным. Если вам нужно передавать данные с событиями, переменная сеанса, такая как статические поля в основном классе, будет служить вашей цели
- Мне нужно было бы больше информации о том, что именно вы хотите поместить в какой менеджер
Надеюсь, это поможет!