В таких ситуациях я обычно делаю сначала дизайн фреймворка для веб-страниц. У меня будет div для заголовка, бокового меню и нижнего колонтитула. У меня также будет div
в моем HTML для основного контента.
макеты на основе, не стесняйтесь использовать их вместо этого.)
Затем вы строите свою точку входа (в моем случае Core.java
), как обычно, устанавливая каждый из элементов по мере необходимости.
RootPanel.get("header").add(new Header());
RootPanel.get("leftnav").add(new NavigationMenu());
RootPanel.get("footer").add(new Footer());
Конечно, возможно иметь статический нижний колонтитул и заголовок, но это ни здесь, ни там.
У меня также есть абстрактный класс, который называется «Содержимое». Контентные объекты расширяют «Composite» и будут иметь различные методы для упрощения создания и макета новой страницы. Каждая страница, которую я создаю для этого приложения, будь то экран справки, экран поиска, корзина покупок или что-то еще, имеет тип Content
.
Теперь я создаю класс ContentContainer. Это синглтон, который отвечает за управление элементом «контент». У него есть один метод "setContent", который принимает объекты типа "Content". Затем он в основном удаляет что-либо внутри «содержимого» * 1019 * и заменяет его любым виджетом (Composite), который вы назначаете с помощью метода «setContent». Метод setContent также обрабатывает историю и управление строкой заголовка. По сути, ContentContainer служит для агрегирования всех различных точек привязки, которые вам, возможно, придется выполнить, если контент каждой страницы должен «знать» обо всех функциях, которые он должен выполнять.
Наконец, вам нужен способ попасть на эту страницу, верно? Это просто:
ContentContainer.getInstance().setContent(new Search());
Поместите вышеупомянутое в событие щелчка где-нибудь, и Вы - золотой.
Единственное, с чем должны быть связаны другие ваши виджеты, это ContentContainer и тип контента, который они добавляют.
Недостатки подхода ChrisBo, которые я вижу, это то, что у вас есть список токенов -> страниц, который нужно поддерживать. Другим недостатком, который я вижу, является то, что я не понимаю, как с помощью этого метода можно создать реальную систему истории.
Одна вещь, которую он предлагает по сравнению с моим подходом, заключается в том, что весь выбор страниц довольно централизован. Я бы использовал какой-то тип Enum или, по крайней мере, статический класс со значениями String, чтобы не мешать ссылкам.
В любом случае, я думаю, что смысл можно суммировать следующим образом: поменять содержимое некоторого центрального элемента страницы на основе на основе того, что ваш пользователь нажимает действий, которые выполняют ваши пользователи.