2012-05-15 10 views
7

Escribí un taglib que ejecuta cierta lógica y representa algunos datos entrelazados en HTML. Cuando uso el taglib en una vista, el taglib espera encontrar la plantilla en una subcarpeta relativa de la vista. ¿Hay alguna manera en que pueda hacer que el taglib recoja la plantilla de una carpeta común como la carpeta de diseños/a la vista? Así es como el código de taglib ve:Grails: Escribir un taglib que usa una plantilla para representar datos y mantenerlo como controlador agnóstico

class IconifiedTextTagLib { 

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

Cuando uso la etiqueta <g:renderIconText /> en, por ejemplo un controlador llamado A, entonces se espera que los taglibTemplates/IconText a estar presentes en el vistas/A/ carpeta. Esto es un problema porque necesito poder usarlo desde múltiples controladores. Necesito una forma de poner las plantillas en una carpeta como layouts/para que pueda usarse en todas las vistas. ¿Alguna idea sobre cómo puedo hacer esto?

Respuesta

9

plantilla Poner en views/taglibTemplates/ y tratar:

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

o en `vistas/A /', y

out << render(template:"/A/iconText", model:modelMap) 
+2

Pues resulta que el líder/faltaba. Gracias por señalar eso. –

1

en griales 2.3.8 tuve que usar como tal

asegúrese de que el nombre de archivo de la plantilla comience con subrayado

_mytemplate.gsp 

en su etiqueta de clase biblioteca

out << g.render(template: '/taglibTemplates/mytemplate') 
Cuestiones relacionadas