В чем разница между doLayout и включением в шаблон в Java Play! - PullRequest
5 голосов
/ 17 декабря 2010

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

В чем разница и какова лучшая практика?

Ответы [ 2 ]

6 голосов
/ 18 декабря 2010

Они как бы обратны друг другу.

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'}

И где ваш код вводится в шаблон. Html управляется тегом doLayout.

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

4 голосов
/ 19 декабря 2010

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

расширение и включение аналогичны, разница главным образом в том, что вы обойти переменные

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...