GWT 2.1 MVP (Действия/Места) и дисплеи с вкладками

В существующем проекте мы достаточно хорошо используем MVP (созданное вручную). Это понятно и делает в основном то, что нам нужно. Для нового проекта я рассматриваю использование платформы MVP, встроенной в GWT 2.1 (деятельность и места).

Наши приложения в основном представляют собой экраны с вкладками, где каждая вкладка привязана к одному виджету представления.

Я безуспешно пытался использовать «Действия» и «Места» для этого типа отображения. Часть проблемы заключается в том, что пример статьи Hello World в конечном итоге оставил меня в погоне за своим хвостом, слишком много новых концепций для моего мозга, чтобы их переварить.

Образец Hello World IMO не является достаточным введением и не имеет отношения ко многим случаям использования в реальном мире. Я надеялся, что кто-нибудь может указать мне направление каких-либо примеров приложений, которые используют MVP для отображения с вкладками. У Томаса Бройера есть несколько отличных постов в его блоге, но они все еще оставляют меня в недоумении.

Раньше я использовал AppController для обработки изменений вкладок и отдельных презентаторов для каждой вкладки. Новая архитектура в GWT 2.1 сбивает меня с толку больше, чем должна.


person K2J    schedule 02.02.2011    source источник


Ответы (2)


Я использую структуру gwt Activity/Places для отображения с вкладками, и она отлично работает, НО: я решил отказаться от виджета TabLayoutPanel, который мы использовали, и создать свою собственную панель навигации (выглядит как вкладки) и панель содержимого. Эффект тот же — выглядит идентично — но реализация намного чище.

Я думаю, что проблема заключается в попытке смешать Activity/Places, у которого есть собственное представление о навигации, с TabPanel, у которого другое представление о навигации. Сначала я попытался собрать их вместе, переопределив поведение кнопки вкладки, чтобы вызвать PlaceController, который, в свою очередь, переключил вкладки, но... это было беспорядочно. С независимой панелью навигации/контентом PlaceController мог делать все так, как хотел. Вам просто нужно вручную переключать представления, вместо того, чтобы позволять TabPanel делать это за вас.

person Riley Lark    schedule 02.02.2011

Я также столкнулся с этой проблемой, но мне удалось заставить ее работать, используя одно действие на вкладку и каждое действие с использованием ведущего (или более) для отображения компонентов вкладки.

Что касается решения, найденного Райли Ларк, я вместо этого решил использовать шаблон Decorator и, таким образом, сохранить исходную TabbedPanel. Как ? В каждое действие вводится (GIN) презентатор, который содержит декоратор для TabbedPanel.

Так, например:

  • Tab1Activity внедряется с помощью Tab1Presenter, который, в свою очередь, внедряется с помощью Tab1Decorator, который украшает TabbedPanel с помощью Tab1ContentPanel (эта панель содержит все виджеты, которые будут отображаться на вкладке Tab1).

  • Tab2Activity внедряется с помощью Tab2Presenter, который, в свою очередь, внедряется с помощью Tab2Decorator, который украшает ту же TabbedPanel с помощью Tab2ContentPanel (эта панель содержит все виджеты, которые будут отображаться на вкладке Tab2).

Кажется сложным, но после создания первого декоратора это действительно окупилось, и я смог сохранить TabbedPanel и воспользоваться преимуществом управления историей URL-адресов, неявным в фреймворке.

person sbrnunes    schedule 24.04.2013
comment
В GWT нет TabbedPanel — есть TabPanel, который работает только в режиме quirks, и TabLayoutPanel, который не принимается ActivityManager. Я пробовал этот подход, и он не работает. Пожалуйста, покажите код или уточните его. - person foamroll; 09.02.2016