【发布时间】:2016-07-19 23:01:05
【问题描述】:
我有一个简单的 Groovy 方法,它使用 Groovy 的 MarkupBuilder 来打印 HTML,下面是非常简化的版本:
void writeHtmlFile(<args>) {
def writer = new FileWriter(fileName.toFile())
def html = new MarkupBuilder(writer)
html.mkp.yieldUnescaped '<!DOCTYPE html>'
html.mkp.xmlDeclaration(version: "1.0", encoding: "utf-8")
html.html {
head { ... }
body(id: 'main') {
h1 "Report Title"
}
}
writer.flush()
writer.close()
}
这很好用。假设我想在 h1 之后调用一个方法,它会进行一些计算并为 MarkupBuilder 添加更多内容。如何将被调用方法中定义的元素添加到 MarkupBuilder?这是我尝试过的不会导致异常但也不起作用(生成的 HTML 没有 <h2> 元素):
Closure testNested() {
println '---'
return { h2 "here's a subheading" }
}
// .... other stuff from above example not repeated ...
html.html {
head {...}
body(id: 'main') {
h1 "Report Title"
testNested()
}
我知道我可以轻松地内联。我试图加深对 Groovy 如何在 DSL 中使用闭包和委托的理解,显然我遗漏了一些东西。
【问题讨论】:
标签: groovy