Я пытаюсь написать приложение GWT, которое повторно использует один и тот же шаблон для каждой «страницы» (места). Есть 4 основные «страницы» приложения:
- Страница панели инструментов (
http://www.mywebapp.com/#dashboard
) - Страница калькулятора (
http://www.mywebapp.com/#calc
) - Страница конфигуратора (
http://www.mywebapp.com/#config
) - Страница входа (
http://www.mywebapp.com/#login
)
Каждая «страница» имеет одинаковый шаблонный внешний вид: (1) раздел заголовка, который содержит логотип и меню навигации, (2) раздел контента, который содержит контент, специфичный для «страницы» (т. е. будет отличаться для #dashboard
место, #login
место и т. д.) и (3) раздел нижнего колонтитула, содержащий несколько ссылок. Итак, вы видите, единственное, что меняется от страницы к странице, — это раздел контента. Так же, как обычный шаблонный веб-сайт.
Дело в том, что каждая «страница» (место) на самом деле представляет собой довольно сложный пользовательский интерфейс с множеством различных панелей, состоящих из множества виджетов. Когда пользователь взаимодействует с приложением, эти панели будут появляться и исчезать, а отображение будет постоянно меняться. Например, на странице #calc
пользователь может выбрать, в каком «режиме» отображать калькулятор: в базовом или в расширенном. Когда пользователь выбирает Дополнительно, отображаются несколько дополнительных панелей (в дополнение к панели Основные).
Было бы неплохо иметь возможность сохранять такие действия в истории, чтобы пользователь мог добавить приложение в закладки в режиме Basic или Advanced, например:
http://www.mywebapp.com/#calc/basic
; orhttp://www.mywebapp.com/#calc/advanced
Вот в чем проблема:
У нас уже есть несколько «уровней» мероприятий/мест, происходящих здесь. На уровне «приложения» у нас есть шаблон, который нужно показать пользователю при загрузке MyWebAppModule implements EntryPoint
. Это TemplatePlace
является местом по умолчанию/начальным, которое зарегистрировано в HistoryHandler перед вызовом:
public class MyWebAppModule implements EntryPoint {
@Override
public void onModuleLoad() {
// ...
// The first place we go to when this module downloads.
TemplatePlace templatePlace = getSomehow();
historyHandler.register(placeController, eventBus, templatePlace);
historyHandler.handleCurrentHistory();
}
}
Затем у нас есть все разные «страницы»: DashboardPlace
, CalculatorPlace
и т. д., каждая из которых имеет свои уникальные представления/отображения. Например, когда пользователь щелкает ссылку Калькулятор, чтобы перейти к CalculatorPlace
, он должен отображать представление, отличное от того, когда указывает, что он хочет использовать калькулятор в базовом или расширенном режиме.
Наконец, у нас есть разные области отображения, панели и т. д. внутри каждой страницы/места, например, BasicCalculatorPlace
и AdvancedCalculatorPlace
. Вот что я имею в виду под разными «уровнями» навигации:
- Уровень приложения (шаблон для применения ко всем страницам/местам)
- Уровень страницы или места
- Уровень дисплея или панели
Вопрос:
Я хочу получить URL-адреса (места) с закладками, когда пользователь выполняет все следующие действия:
- Переходит на главную страницу (
http://www.mywebapp.com
) - Переходит на любую из "страниц" (
http://www.mywebapp.com/#calc
и т.д.) - Использует страницы/места, которые вызывают специфичные для страницы настройки панели или отображения (
http://www.mywebapp.com\#calc\#advanced
и т. д.)
Сколько действий и мест я могу создать? Сколько ActivityManagers? Наверное, я спрашиваю, насколько детальными должны быть Activity/Places для каждого «уровня» пользовательского интерфейса с закладками. Заранее спасибо!