如何将构建委托给方法?

发布于 2024-09-02 07:07:01 字数 433 浏览 16 评论 0原文

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

我做错了什么?

I am writing a Groovlet and would like to delegate part of the HTML builder to a method but am having trouble getting it to work. Below is what I have:

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

I am expecting the following output:

<html>
  <p>p</p>
  <p>page1</p>
</html>

Instead what I get is the following:

<p>text</p> 
<html> 
  <p>p</p>
</html>

What am I doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

执笏见 2024-09-09 07:07:01

我对有问题的构建器不太熟悉,但我希望做类似的事情:

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

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

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

I'm not overly familiar with the builder in question but I'd expect to be doing something like:

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

Instead of pages[page1], of course, you could call any closure or a .&'d method.

You need the delegate.with so that the closure you're running has its method calls (like p()) resolved to the delegate of the closure running it (that is, the HtmlBuilder).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文