Действия и места GWT: повторное использование модальных диалогов?

Я пытаюсь разобраться в деятельности и местах GWT. И я не уверен, как реализовать конкретную функциональность.

Давайте предположим, что я также использую MVP и что мои действия являются моими докладчиками.

Скажем, у меня есть действие (назовем его действием А) (и соответствующее ему представление), которое отображает список клиентов. Пользователь может нажать кнопку «Создать клиента» в представлении.

Что я хочу сделать, так это: я хочу, чтобы диалоговое окно «Создать клиента» всплывало поверх текущего действия, когда пользователь нажимает кнопку. Я также хочу, чтобы вся логика, связанная с указанным диалогом, была разделена, чтобы ее можно было повторно использовать позже.

Например, тот же диалог можно повторно использовать в действии «создание счета». Таким образом, пользователь может щелкнуть аналогичную кнопку «создать клиента» в действии «создать счет», и ему будет представлен тот же диалог, который использовался ранее.

Теперь, если я правильно понимаю, я не хочу переходить в новое место, так как это прервет текущую деятельность «список клиентов» или «создание счета».

Я подумал об определении «CreateCustomerPresenter» и «CreateCustomerDialog» (что было бы соответствующим представлением), а мои действия «список клиентов»/«создание счета» (напоминание: они также являются моими докладчиками) расширяют «CreateCustomerPresenter» , но я не знаю, будет ли это мудрой идеей...

Каков рекомендуемый способ повторного использования логики + представления, связанного с диалогом в контексте действия?


person bug    schedule 12.12.2013    source источник


Ответы (2)


Есть несколько правильных подходов, но я обычно предпочитаю следующий: вообще не рассматривать диалоги как места (действия).

Обоснование: место означает, что вы можете добраться до него через закладки/история браузера. Допустим, я в списке клиентов, и я нажимаю «изменить клиента», открывается диалоговое окно. Хочу ли я «вернуться» к списку, когда я нажимаю кнопку «Назад» в браузере? И откроется ли диалоговое окно снова, когда я нажму кнопку браузера вперед? Я сомневаюсь в этом и считаю, что пользователь хочет использовать кнопки браузера для перехода назад/вперед по целым «страницам» в приложении (т. е. концепция, которая воспринимается пользователем как страница), но не открывать/закрывать диалоги на странице. .

person Chris Lercher    schedule 12.12.2013

Я сделал именно это совсем недавно.

Подход, который я использовал, заключался в том, чтобы создать действие/представление обычным способом для содержимого диалогового окна. Чтобы запустить, создайте действие/представление для встраивания в диалоговое окно — я назвал это вспомогательным действием. Создайте модальное диалоговое окно, а затем вызовите start для субактивности, передавая содержимое диалогового окна в качестве панели. Затем в основном действии я перенаправил mayStop, stop и т. д. в поддействие.

Сложная часть заключалась в обработке закрытия диалога и передаче управления обратно в основную активность. В итоге я добавил слушателя в диалог и запускал события на шине событий, которые были выбраны моей основной активностью. Я не на 100% доволен этим, но это работает.

Я не использовал его, но думаю, что GWTP поддерживает этот и другие способы создания вспомогательных действий вне -коробка.

person pillingworth    schedule 12.12.2013