Groovy TemplateEngine - 标记创建函数
Groovy TemplateEngine - function for markup creation
我是一名 JS 程序员,正在尝试编写一些 Groovy 代码(完全没有 Java 背景)。我需要使用 Groovy 编写一些模板,因此我创建了一个函数以避免重复。我的目标是能够将 html 对象传递给函数(例如:p()
、div()
、span()
等等),但它无法正常工作我预计:
函数
void addon ( addonType, mainHolder, content ) {
div( class: "addon " + addonType ) {
div( class: "addon-main" ) {
div( class: "addon-main-holder" ) {
yieldUnescaped mainHolder
}
}
div( class: "addon-content" ) {
yieldUnescaped content
}
}
}
不起作用:
[...]
body {
addon( 'addon-warning', p('Lorem Ipsum'), p('Dolor sit amet consectetur') )
}
[...]
作品:
[...]
body {
addon( 'addon-warning', '<p>Lorem Ipsum</p>', '<p>Dolor sit amet consectetur</p>') )
}
[...]
我尝试了一些变化,使用 yield
而不是 yieldUnescaped
,但没有成功。可能吗?任何帮助将不胜感激。
假设您想将更多基于 DSL 的标签传递到您的 addon
函数中,我会改为将闭包传递给该函数。这是一个简化的、自包含的版本(这使得它有点难以阅读,因为模板是一个字符串;看看 XXX
评论):
import groovy.text.markup.*
def config = new TemplateConfiguration()
def engine = new MarkupTemplateEngine(config)
def template = engine.createTemplate('''
html {
body {
addon("Hello World", { // XXX: pass a closure
p("Lorem Ipsum")
p("Lorem Ipsum")
p("Lorem Ipsum")
})
}
}
void addon(title, content) {
h1(title)
div {
content() // XXX call the closure
}
}
''')
Writable output = template.make([:])
println output
// => <html><body><h1>Hello World</h1><div><p>Lorem Ipsum</p><p>Lorem Ipsum</p><p>Lorem Ipsum</p></div></body></html>
我是一名 JS 程序员,正在尝试编写一些 Groovy 代码(完全没有 Java 背景)。我需要使用 Groovy 编写一些模板,因此我创建了一个函数以避免重复。我的目标是能够将 html 对象传递给函数(例如:p()
、div()
、span()
等等),但它无法正常工作我预计:
函数
void addon ( addonType, mainHolder, content ) {
div( class: "addon " + addonType ) {
div( class: "addon-main" ) {
div( class: "addon-main-holder" ) {
yieldUnescaped mainHolder
}
}
div( class: "addon-content" ) {
yieldUnescaped content
}
}
}
不起作用:
[...]
body {
addon( 'addon-warning', p('Lorem Ipsum'), p('Dolor sit amet consectetur') )
}
[...]
作品:
[...]
body {
addon( 'addon-warning', '<p>Lorem Ipsum</p>', '<p>Dolor sit amet consectetur</p>') )
}
[...]
我尝试了一些变化,使用 yield
而不是 yieldUnescaped
,但没有成功。可能吗?任何帮助将不胜感激。
假设您想将更多基于 DSL 的标签传递到您的 addon
函数中,我会改为将闭包传递给该函数。这是一个简化的、自包含的版本(这使得它有点难以阅读,因为模板是一个字符串;看看 XXX
评论):
import groovy.text.markup.*
def config = new TemplateConfiguration()
def engine = new MarkupTemplateEngine(config)
def template = engine.createTemplate('''
html {
body {
addon("Hello World", { // XXX: pass a closure
p("Lorem Ipsum")
p("Lorem Ipsum")
p("Lorem Ipsum")
})
}
}
void addon(title, content) {
h1(title)
div {
content() // XXX call the closure
}
}
''')
Writable output = template.make([:])
println output
// => <html><body><h1>Hello World</h1><div><p>Lorem Ipsum</p><p>Lorem Ipsum</p><p>Lorem Ipsum</p></div></body></html>