Калитка: иерархия сайтов - PullRequest
0 голосов
/ 25 января 2012

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

Моя структура похожа на:

Root: HomePage
Страница1 расширяет домашнюю страницу
Страница2 расширяет домашнюю страницу
Страница3 расширяет домашнюю страницу

Страницы обертывают контент и собственную навигацию. Они получают init в HomePage.html с дочерним элементом wicket.

Теперь, когда я определяю новую панель для Page1, я должен также определить ссылку для нее. Для ссылки onClick () я установил панель, на которую она ссылается, видимую, а все остальные панели - невидимую. Также я должен определить на странице Page1 панель, которая отображается при переходе на страницу Page1. Все остальные панели невидимы.

Это хорошая попытка или есть лучший способ? Теперь я инициализирую когда-либо панель и просто держу их невидимыми.

1 Ответ

2 голосов
/ 26 января 2012

Ответ на ваши вопросы ... Предполагается, что вы используете Wicket 1.4.x.

Во-первых, у вас может быть много уровней Page классов, часто имитирующих совпадение дизайна и функции. Например, скажем, у вас есть приложение, в котором люди «пишут», «просматривают» и «читают» созданные пользователем книги.

RootPage - common headers/footers, javascript imports
AbstractWritePage extends RootPage - for anything regarding authoring
AbstractBrowsePage extends RootPage - browsing
AbstractReadPage extends ReadPage - reading

Затем я реализую что-то вроде:

FullLibraryPage extends AbstractBrowsePage
FilterSearchPage extends AbstractBrowsePage

В конце концов, это становится сложным, но очень мощным.

Во-вторых, ваши компоненты Panel становятся видимыми / невидимыми. Если вы используете Wicket 1.4.x, вы должны посмотреть на переопределяемый метод onConfigure() для каждой панели. На этой панели вы можете установить видимость как:

@Override
protected void onConfigure() {
    super.onConfigure();
    setVisible(!navTriggered);

}

где navTriggered - логическое значение, находящееся на содержащей странице. Тогда ваша ссылка может сделать простое:

@Override
protected void onClick(AjaxRequestTarget target) {
    navTriggered = false;
    target.addComponent(/* Appropriate panels; see below for multiples */);
}

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

Наконец, если у вас есть много панелей, которые необходимо изменить / запустить / и т.д., рассмотрите возможность объединения IVisitor с интерфейсом маркировки. Что-то вроде ...

public class Panel1 implements MyPanelGroup { ... }
public class Panel2 implements MyPanelGroup { ... }

Затем вы можете использовать IVisitor, чтобы посетить каждый экземпляр MyPanelGroup на странице и сделать что-то с видимостью (либо установить видимость, добавить его к AjaxRequestTarget и т. Д.).

Надеюсь, что что-то ответит:)

...