Grails: написание taglib, использующего шаблон для рендеринга данных и сохраняющего независимость от контроллера.

Я написал taglib, который выполняет некоторую логику и отображает некоторые данные, вплетенные в HTML. Когда я использую taglib в представлении, taglib ожидает найти шаблон в относительной подпапке представления. Есть ли способ, которым я могу заставить taglib забрать шаблон из общей папки, такой как макеты/папка в поле зрения. Вот как выглядит код taglib:

class IconifiedTextTagLib { 

def renderIconText = { attrs, body ->   
                 //some processing logic to generate the modelMap
         out << render(template:"taglibTemplates/iconText", model:modelMap)
    }
}

Когда я использую тег <g:renderIconText />, скажем, в контроллере с именем A, он ожидает, что taglibTemplates/iconText будет присутствовать в views/A/. папка. Это проблема, потому что мне нужно иметь возможность использовать его с нескольких контроллеров. Мне нужен способ поместить шаблоны в папку, например layouts/, чтобы их можно было использовать во всех представлениях. Любые мысли о том, как я могу это сделать?


person Ritesh M Nayak    schedule 15.05.2012    source источник


Ответы (2)


Поместите шаблон в views/taglibTemplates/ и попробуйте:

out << render(template:"/taglibTemplates/iconText", model:modelMap)

или в `views/A/', и

out << render(template:"/A/iconText", model:modelMap)
person Igor Artamonov    schedule 15.05.2012
comment
Ну оказывается ведущий/отсутствовал. Спасибо что подметил это. - person Ritesh M Nayak; 15.05.2012

на grails 2.3.8 мне пришлось использовать как таковой

убедитесь, что имя файла шаблона начинается с подчеркивания

_mytemplate.gsp

в вашем классе библиотеки тегов

out << g.render(template: '/taglibTemplates/mytemplate')
person elixir    schedule 29.10.2015