¿Cómo delego la construcción de un método?
Pregunta
Estoy escribiendo un Groovlet y me gustaría delegar parte del constructor de HTML a un método, pero estoy teniendo problemas para conseguir que funcione. A continuación se muestra lo que tengo:
def pages = [page1: html.p("page1")]
html.html {
p("p")
pages[page1]
}
Estoy esperando el siguiente resultado:
<html>
<p>p</p>
<p>page1</p>
</html>
En cambio, lo que se ve es la siguiente:
<p>text</p>
<html>
<p>p</p>
</html>
¿Qué estoy haciendo mal?
Solución
No estoy demasiado familiarizado con el constructor en cuestión, pero yo esperaría que estar haciendo algo como:
def pages = [page1: { p("page1") }]
html.html {
p("p")
delegate.with pages[page1]
}
En lugar de pages[page1]
, por supuesto, usted podría llamar a cualquier cierre o un método .&
'd.
Se necesita el delegate.with
manera que el cierre que se está ejecutando tiene sus llamadas a métodos (como p()
) resolvió el delegado del cierre de ejecutarlo (es decir, el HtmlBuilder
).
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow