Есть ли хорошие учебные пособия для использования sitemesh в приложении grails?
Я довольно опытный разработчик Grails, но большую часть моего опыта использовал grails для обслуживания JSON/XML для гибкого приложения и некоторых относительно простых HTML-сайтов.
Я погружался глубже в использование интеграции sitemesh в grails, и я немного стараюсь найти лучшие практики для некоторых более сложных конфигураций, и мне любопытно, есть ли хорошие учебники или примеры там. оригинальный сайт Sitemesh не так полезен, поскольку теги, о которых он говорит, непосредственно не отображаются в grails.
В поиске Google в основном отображаются старые почтовые рассылки и некоторые материалы для ванильного ситэмеша, которые помогают мне двигаться немного дальше, но это много проб и ошибок.
Я полностью понимаю, как работают основные шаблоны g: layoutTitle, g: layoutHead и g: layoutBody. Это легко и хорошо документировано.
Виды вещей, которые я хотел бы увидеть для примеров:
-
g: applyLayout - документация по этому вопросу является слабой, и я не совсем понимаю использование, предлагаемое в основных документах. Как это отличается от установки свойства meta name='layout' content='foo'
?
-
g: pageProperty - несколько лучших примеров того, как вытащить и использовать свойства в основной шаблон, установив значения как метатеги на оформляемой странице. grails docs на страницеProperty показывают только атрибут onload из тела, которое выводится вперед. Я думаю, что вы также можете использовать значения метатега здесь, что-нибудь еще?
-
Можно ли использовать несколько уровней компоновки sitemesh? Мое тестирование, похоже, заставляет меня думать, что я не могу, но это, похоже, уменьшает повторное использование. Я думаю, что ответ здесь - это использование g: applyLayout, но это то, где я изо всех сил стараюсь.
Ответы
Ответ 1
Ну, я могу немного ответить:
Ваш первый и третий вопросы связаны друг с другом, поскольку вы не можете связать макеты с помощью метатега.
На вашей последней странице должен быть метатег, как вы предлагаете, но если вы хотите наложить макет поверх другого макета, вы помещаете ag: 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, поэтому я не могу бросить вам лучшие примеры, извините.
Ответ 2
g: pageProperty - очень мощная, но очень плохо документированная вещь. Скажем, в моем макете я указываю, где разместить некоторый контент следующим образом:
<html>
<body>
<g:pageProperty name="page.header" />
</body>
Теперь на моей странице я могу указать некоторый контент:
<content tag="header">
<!-- header -->
</content>
Sitemesh примет тег контента, независимо от фактической позиции в HTML-странице страницы, и поместите его туда, где он должен идти в потоке макета.
Еще лучше, если в моей странице я создаю шаблон, который также указывает область содержимого с тегом "header", он перезапишет первое объявление, и это будет содержимое шаблона, которое будет отображаться в окончательном макете.
Ответ 3
Sitemesh вместе с Grails - очень мощная функция. Чем больше я его использую, тем больше мне это нравится. Вы можете украсить любую часть нашего веб-сайта: вы можете иметь макет для сообщений об ошибках, всплывающих подсказок, новостных лент, комментариев и т.д. И т.д. Просто обратите внимание, что вы можете делать это даже на своих страницах и иметь несколько уровней оформления (нет <content> ):
/view/layout/inline-error-message.gsp
<span class="errorMessageInSomeFancyBox">
<span class="errorIcon"></span>
<g:layoutBody />
<span>
/views/book/create.gsp
<%-- let decorate our error message with some fancy box --%>
<g:applyLayout name="inline-error-message">${some.error.message}</g:applyLayout>
Ответ 4
Смотрите приложение Rabbtor Showcase для нескольких очень хороших примеров на
- создание вложенных макетов
- шаблоны рендеринга
- применение макетов к определенным частям страницы
. Это приложение является демонстрацией нашего инструмента Rabbtor, который позволяет использовать GSP вне Grails, но части, связанные с Sitmesh, также действительны для Grails.