Как активировать вложенные представления в Grails - PullRequest
0 голосов
/ 10 апреля 2011

Проблема в том, что вы не знаете, какой из способов является лучшим для запуска различных шаблонов в Grails. Я пытаюсь жестко запрограммировать меню, но по-прежнему есть разные меню для разных областей. Лично я считаю ненужным выполнение запросов к базе данных при создании меню.

Быстрый просмотр фрагмента и сценария. subnav - это динамическое меню.

<body>
  <div id='navigation'>
    Main menu list
  </div>
  <div id='subnav'>
    Render grails template base on path
    e.g. http://www.example.com/cars/ford => render ${ford} menu template
         http://www.example.com/cars/toyota => render ${toyota} menu template
  </div>
</body>

Теперь рендеринг шаблона - это простая часть, поскольку я мог бы просто использовать переменную, которая следует за именем шаблона. например <g:render template="/layouts/${submenu-name}"/>

В чем я не уверен, так это в том, как лучше всего установить эту переменную. (добрые / злые практики)

Использую ли я фильтр и перебираю url / uri, чтобы узнать свое местоположение, ИЛИ я устанавливаю его каждый раз в контроллере, когда это необходимо, ИЛИ использую то, о чем я не думал?

Спасибо

EDIT:

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

* 1023 Е.Г. *

def filters = {
car(uri:'/car/*') {
    after = { model -> model.menuTpl = 'car' }
}
bike(uri:'/bike/*') {
    after = { model -> model.menuTpl = 'bike' }
}

А потом на главном экране:

<g:render template="/layouts/${menuTpl}" />

1 Ответ

2 голосов
/ 11 апреля 2011

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

В моем макете есть раздел заголовка в теле, который содержит стилизованную полосу, проходящую через страницу. Эта панель содержит заголовки типа «Логин», «Панель инструментов», «Поддержка» и т. Д. Итак, в моем файле login.gsp есть следующее:

<meta name="nav" content="login"/>

И в моем макете main.gsp у меня есть следующее:

<g:if test="${pageProperty(name:'meta.nav') == 'login'}">
   <ul id="menu">
      <li>Login</li>
   </ul>
</g:if>

У меня есть несколько блоков, проверяющих meta.nav. Некоторые из них даже больше, чем просто текст. Некоторые тянут в шаблоны.

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