Существуют ли какие-либо хорошие руководства по использованию sitemesh в приложении grails?
Вопрос
Я довольно опытный разработчик Grails, но большая часть моего опыта была связана с использованием grails для предоставления JSON / XML в приложении flex и некоторых относительно простых HTML-сайтах.
Я углубился в использование интеграции sitemesh в grails, и я немного пытаюсь найти лучшие практики для некоторых более сложных конфигураций, и мне любопытно, есть ли какие-нибудь хорошие руководства или примеры.В оригинальная Сетка Сайта веб-сайт не настолько полезен, поскольку теги, о которых он говорит, напрямую не отображаются в grails.
Поиск в Google в основном показывает старые записи в списке рассылки и кое-что из ванильного sitemesh, что помогает мне продвинуться немного дальше, но это много проб и ошибок.
Я полностью понимаю, как работают базовые теги g: layoutTitle, g: layoutHead и g: layoutBody.Они просты и хорошо документированы.
Те вещи, для которых я хотел бы увидеть примеры:
g: Описание приложения - документация по этому является слабым, и я не до конца понимаю способы использования, предложенные в основных документах.Чем это отличается от установки
meta name='layout' content='foo'
собственность?g: pageProperty - несколько лучших примеров того, как извлекать и использовать свойства в основном шаблоне, устанавливая значения в виде мета-тегов на оформляемой странице.В документы grails по pageProperty показывать только атрибут onload из переносимого тела.Я думаю, вы также можете использовать значения мета-тегов и здесь, что-нибудь еще?
можете ли вы использовать несколько уровней макетов sitemesh?Мое тестирование, кажется, заставляет меня думать, что я не могу, но это, похоже, уменьшает возможность повторного использования.Я думаю, что ответ здесь заключается в некотором использовании g: applyLayout , но именно с этим я сталкиваюсь больше всего.
Решение
Ну, я могу немного ответить:
Ваши первый и третий вопросы связаны, так как вы не можете связать макеты в цепочку, используя мета-тег.
Ваша конечная страница должна иметь мета-тег, как вы предлагаете, но если вы хотите наложить макет поверх другого макета, вы помещаете тег g: applyLayout в верхней части дочернего макета, указывающий на родительский.
В вашем edit.gsp у вас будет:
<meta name="layout" content="editTemplate" />
и в editTemplate.gsp у вас будет:
<g:applyLayout name="baseTemplate" >
<!-- the html for the editTemplate -->
</g:applyLayout>
таким образом, edit.gsp будет использовать editTemplate.gsp , который будет использовать baseTemplate.gsp в качестве базового макета.Вы можете связать их цепочкой по мере необходимости.
Я вообще не использовал g: pageProperty, поэтому, извините, не могу привести вам лучших примеров.
Другие советы
g: pageProperty - это очень мощная, но очень плохо документированная вещь.Допустим, в моем макете я указываю, куда поместить некоторый контент, подобный этому:
<html>
<body>
<g:pageProperty name="page.header" />
</body>
Теперь на своей странице я могу указать некоторый контент:
<content tag="header">
<!-- header -->
</content>
Sitemesh примет тег content, независимо от фактического положения в HTML страницы, и разместит его там, где он должен находиться в потоке макета.
Еще лучше, если на моей странице я создам шаблон, который также определяет область содержимого с тегом "header", он перезапишет первое объявление, и в окончательном макете будет отображено содержимое шаблона.
Sitemesh вместе с Grails - это очень, очень мощная функция.Чем больше я им пользуюсь - тем больше он мне нравится.Вы можете украсить любую часть нашего веб-сайта:у вас может быть макет для сообщений об ошибках, всплывающих подсказок, новостных строк, комментариев и т.д. И т.п.Просто отметим, что вы можете сделать даже это с помощью своих страниц и иметь несколько уровней оформления (не требуется <content> ):
/вид/макет/встроенное сообщение об ошибке.gsp
<span class="errorMessageInSomeFancyBox">
<span class="errorIcon"></span>
<g:layoutBody />
<span>
/просмотры/забронировать/создать.gsp
<%-- let's decorate our error message with some fancy box --%>
<g:applyLayout name="inline-error-message">${some.error.message}</g:applyLayout>
Смотрите наш Приложение для демонстрации Rabbtor для нескольких очень хороших примеров на
- создание вложенных макетов
- шаблоны рендеринга
- применение макетов к определенным частям страницы
.Это приложение на самом деле является демонстрацией нашего инструмента Rabbtor, который позволяет использовать GSP вне Grails, но части, связанные с Sitmesh, также действительны для Grails.