如何将构建委托给方法?

时间:2010-05-19 17:00:38

标签: html groovy builder groovlet

我正在编写一个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>

我做错了什么?

1 个答案:

答案 0 :(得分:2)

我对这个有问题的建筑师并不过分熟悉,但我希望能做到这样的事情:

def pages = [page1: { p("page1") }]
html.html {
   p("p")
   delegate.with pages[page1]
}

当然,您可以调用任何闭包或pages[page1]方法,而不是.&

你需要delegate.with以便你正在运行的闭包有它的方法调用(如p())解析为运行它的闭包的委托(即HtmlBuilder )。