Может ли Grails Layout вызывать шаблон? - PullRequest
2 голосов
/ 15 декабря 2009

Я хочу, чтобы мой основной макет условно поместил в некоторые блоки html, которые я хочу определить в отдельном файле.

У меня определено несколько видов навигационной панели. Я хочу иметь файл для каждой панели навигации. Затем я хочу просто установить переменную в моем контроллере или конкретном файле gsp, чтобы макет выбирал, какой навигатор использовать.

Ответы [ 2 ]

6 голосов
/ 16 декабря 2009

Вы можете сделать это несколькими различными способами. Первый способ, который я бы предложил попробовать сделать что-то подобное в вашем макете:

<g:if test="${nav == 'nav1'}">
     <g:render template="/nav/nav1" />
</g:if>
<g:elseif test="${nav == 'nav2'}">
     <g:render template="/nav/nav2" />
</g:elseif>
<g:else>
     <g:render template="/nav/default" />
</g:else>

Для отображения этих шаблонов у вас должны быть следующие файлы:

  • grails-app/views/nav/_nav1.gsp
  • grails-app/views/nav/_nav2.gsp
  • grails-app/views/nav/_default.gsp

Обратите внимание, что поскольку шаблон является "относительным к корню", он разрешил шаблон из корня каталога grails-app/views. Подробнее см. В разделе руководства пользователя «Представления и шаблоны» .

Другим методом будет динамическая визуализация навигации на основе такого параметра (в вашем Макете):

<g:render template="/nav/${nav ?: 'default'}" />

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

Если вы все еще сталкиваетесь с проблемами, то я мог бы предположить, что было пропущено что-то еще, например, передача некоторых параметров модели в тег render .

0 голосов
/ 16 декабря 2009

Да, вам просто нужно поставить условия вокруг операторов g: render. Вы можете сделать

<% if (condition) { %>
 <g:render template="/common/topbar" />
<% } %>

или

<g:if test="yourcondition">
 <g:render template="/common/topbar" />

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