Grails: предоставление данных в глобальный элемент пользовательского интерфейса - PullRequest
0 голосов
/ 18 сентября 2009

Прошу прощения за этот вопрос новичка ...

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

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

Ответы [ 3 ]

0 голосов
/ 20 сентября 2009

Я думаю, вы пытаетесь спросить ... "Как передать данные категории в представление, когда я не знаю, какое действие вызвало отображение страницы, поэтому действие не может добавить данные модель?» Если это так, вы можете использовать Groovy-код непосредственно в блоке $ {}, например:

<g:each in="${ Category.findAll() }" var="cat" />

Обратите внимание, что findAll добавляется в каждый класс Model и может вызываться статически (через имя класса, а не экземпляр).

Надеюсь, это поможет

0 голосов
/ 21 сентября 2009

Я начал это как комментарий к ответу Билла Джеймса, но подумал, что это может быть дольше. Билл предложил использовать Groovy-код внутри $ {}, чтобы шаблон (называемый частичным в Rails) работал глобально:

<g:each in="${ Category.findAll() }" var="cat" />

Но вы не должны просто добавлять код, если не чувствуете, что он может испортить ваш аккуратный xml / html. Вы всегда можете поместить его в замыкание внутри TagLib и таким образом сделать его тегом. У замыкания не должно быть никаких параметров, параметров attr, attr и body, но другие сигнатуры недопустимы.

class CustomTagLib {

 static namespace = 'cus'

    def categories = { attr, body ->
      g.each( in: Category.findAll(), var: attr?.var ?: 'categories' )
    }

}

Затем вы можете использовать этот тег в шаблоне с выбранным пространством имен:

<cus:categories />

Лично я предпочитаю использовать теги, поскольку в большинстве случаев это код многократного использования, поэтому лучше не нарушать принцип СУХОГО.

0 голосов
/ 19 сентября 2009

Вы хотите поместить его в grails-app \ views \ layouts \ main.gsp. Это макет по умолчанию, который будет использовать большинство сгенерированного кода (и, вероятно, большинство примеров, которые вы увидите).

Ознакомьтесь с разделом sitemesh документации Grails.

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