Существуют ли какие-либо хорошие руководства по использованию sitemesh в приложении grails?

StackOverflow https://stackoverflow.com/questions/339424

Вопрос

Я довольно опытный разработчик 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top