В чем разница между doLayout и включением в шаблон в «Java Play!»?

При расширении с помощью doLayout у вас может быть только один подшаблон, но вы можете include больше одного.

В чем разница и как лучше всего?


person Mihai Scurtu    schedule 17.12.2010    source источник


Ответы (2)


Они как бы инверсны друг другу.

doLayout используется как часть тега extends. Тег extends указывает, какой шаблон вы хотите расширить, а тег doLayout указывает, где в расширенном шаблоне вводится ваш код.

Тег include просто указывает, что в указанную точку должен быть введен другой шаблон.

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

Include, это просто тупая инъекция кода.

Если вы хотите добиться функциональности doLayout с помощью include (и именно так вы сделаете это в PHP или чем-то подобном), вы можете сделать

#{include 'header.html'}
your template code
#{include 'footer.html'}

Это должно быть реплицировано на каждой странице вашего шаблона. В то время как использование extends и doLayout позволяет вам просто делать

#{extends 'template.html'}

А когда ваш код вводится в template.html, он управляется тегом doLayout.

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

person Codemwnci    schedule 18.12.2010

Из группы Google я заметил различия между extends (doLayout), include and a tag:

extend и include похожи, разница в основном в том, как вы передаете переменные

С расширением родительский шаблон предоставляет шаблон, а дочерний шаблон предоставляет «тело». Например, родительский шаблон может отображать верхний и нижний колонтитулы, а дочерний шаблон может отображать основное содержимое страницы. Обычно вы устанавливаете переменные в дочернем шаблоне, которые считываются и применяются в родительском шаблоне, например, #{set title:'Pet shop' /} или #{set showLoginBox:true /}.

Вы используете include, когда хотите сделать одно и то же много раз в одном родительском шаблоне. Например #{include 'formStatusFields.html' /} Переменные в родительском шаблоне доступны для включенного шаблона.

Если у вас есть фрагмент кода шаблона, который выполняется из нескольких разных родительских шаблонов, вам следует использовать тег. Вы можете передавать переменные в тег. например #{button label:'Ok', id:'ok-button'}

person niels    schedule 19.12.2010