GWT Действия и места: повторно использовать модальные диалоги?
Я пытаюсь разобраться с деятельностью и местами GWT. И я не уверен, как реализовать конкретную функциональность.
Давайте предположим, что я также использую MVP, и что мои действия - это мои докладчики.
Скажем, у меня есть действие (назовем это действием A) (и его соответствующее представление), которое отображает список клиентов. Пользователь может нажать на кнопку "создать клиента" в представлении.
Я хочу сделать следующее: я хочу, чтобы диалоговое окно "создать клиента" всплыло поверх текущей активности, когда пользователь нажимает кнопку. Я также хочу, чтобы вся логика, связанная с указанным диалогом, была отделена, чтобы ее можно было использовать позже.
Например, тот же диалог может быть повторно использован в операции "создать счет". Таким образом, пользователь может щелкнуть аналогичную кнопку "создать клиента" в действии "создать счет" и получить тот же диалог, который использовался ранее.
Теперь, если я правильно понимаю, я не хочу переходить () на новое место, так как это приведет к прекращению текущей операции "список клиентов" или "создание счета".
Я думал об определении "CreateCustomerPresenter" и "CreateCustomerDialog" (который был бы соответствующим представлением ", и о том, что мои действия" список клиентов "/" создать счет "(напоминание: они также являются моими докладчиками) расширяют" CreateCustomerPresenter ", но я не знаю, будет ли это мудрой идеей...
Каков рекомендуемый способ повторного использования логики + представления, связанного с диалогом, в контексте действия?
2 ответа
Есть несколько подходящих подходов, но я обычно предпочитаю, чтобы это: не рассматривать диалоги как места (действия) вообще.
Причина: место означает, что вы можете достичь его через закладки / историю браузера. Допустим, я в списке клиентов, и я нажимаю "Изменить клиента", откроется диалоговое окно. Хочу ли я вернуться к списку, когда я нажимаю кнопку возврата в браузере? И снова ли откроется диалоговое окно, когда я нажму кнопку браузера вперед? Я сомневаюсь в этом и считаю, что пользователь хочет использовать кнопки браузера для перехода назад / вперед по целым "страницам" в приложении (то есть к концепции, которая воспринимается пользователем как страница), а не к открытию / закрытию диалогов на странице.,
Я сделал именно это совсем недавно.
Подход, который я выбрал, состоял в том, чтобы создать действие / представление обычным способом для содержимого диалога. Для запуска создайте активность / представление для встраивания в диалог - я назвал это вспомогательным действием. Создайте модальное диалоговое окно и затем вызовите start для подэтапа, передающего содержимое диалога в качестве панели. Затем в основном задании я перенаправил mayStop, stop и т. Д. На подзадачу.
Сложная часть заключалась в том, чтобы обрабатывать закрытие диалогов и возвращать управление в основное действие. Я закончил тем, что добавил в диалог слушателя и запустил события на шине событий, которые были подхвачены моей основной деятельностью. Я не на 100% доволен этим, но это работает.
Я не использовал его, но я думаю, что GWTP поддерживает этот и другие способы создания дополнительных действий из коробки.