У меня есть один компонент макета для всех моих страниц, я хочу переключать этот компонент в зависимости от желания пользователя. Я не хочу добавлять свойство на каждую страницу, чтобы вернуть текущий компонент макета.
Как изменить компонент макета на страницах Tapestry 5 во время выполнения?
Ответы (1)
Предполагая, что у вас есть фиксированное количество макетов, вы можете использовать блоки. Ваш layout.tml будет выглядеть примерно так:
<t:delegate to="layout"/>
<t:block id="layout1">
<body>...</body>
</t:block>
<t:block id="layout2">
<body>...</body>
</t:block>
Ваш layout.java будет иметь:
public Object getLayout() {
if (...) {
return _layout1;
} else {
return _layout2;
}
}
@Inject
private Block _layout1;
@Inject
private Block _layout2;
person
Brian Deterling
schedule
12.09.2009
Отлично, но я не хочу помещать все макеты в один файл .tml. Есть ли способ делегировать их компоненту???
- person Bahaa Zaid; 14.09.2009
Да, целью делегата может быть блок или компонент. Таким образом, вы можете просто определить компонент для каждого нужного вам макета. Я думаю, вам все равно нужно перечислить все эти компоненты в основном layout.tml, но html может быть в отдельных компонентах.
- person Brian Deterling; 15.09.2009