Как мне делегировать здание на метод?
Вопрос
Я пишу Groovlet и хотел бы делегировать часть HTML-строителя к методу, но у меня возникли проблемы с целью работы. Ниже есть то, что у меня есть:
def pages = [page1: html.p("page1")]
html.html {
p("p")
pages[page1]
}
Я ожидаю следующего выхода:
<html>
<p>p</p>
<p>page1</p>
</html>
Вместо этого я получаю следующее:
<p>text</p>
<html>
<p>p</p>
</html>
Что я делаю неправильно?
Решение
Я не слишком знаком с вопросом построителя, но я ожидаю, что делать что-то вроде:
def pages = [page1: { p("page1") }]
html.html {
p("p")
delegate.with pages[page1]
}
Вместо pages[page1]
, конечно, вы можете назвать любое закрытие или .&
метод d.
Вам нужно delegate.with
так что закрытие, которое вы работаете, имеет свои вызовы методов (например, p()
) разрешено делегатом закрытия, запущенного его (то есть HtmlBuilder
).
Не связан с StackOverflow