我正在创建一个模板,该模板利用markuptemplate引擎动态更新生成的HTML中的值。我知道.tpl文件也被认为是常规代码,但是我无法在模板内部传递地图。
下面的代码将显示我要实现的目标:
// File: LayoutTemplate.groovy
import groovy.text.*
import groovy.text.markup.*
// Create engine with configuration.
TemplateConfiguration config = new TemplateConfiguration()
MarkupTemplateEngine engine = new MarkupTemplateEngine(config)
Map testMapToPass = ['userEast': 'sam', 'userWest': 'matt']
// Question is how do i pass the above map inside the instance of the template?
text = '''\
layout 'main.tpl',
pageTitle: 'Welcome',
mainContents: contents {
h1 'Welcome'
}, true,
//testMapToPass = ['test': 'one']
testcontent: contents{ ul {
testMapToPass.each {k,v->
li k
newLine()
li v
}
}
}
'''
Template template = engine.createTemplate(text)
// Render output for template.
Writer writer = new StringWriter()
Writable output = template.make([:])
output.writeTo(writer)
String result = writer.toString()
我的main.tpl文件看起来像这样
// File: main.tpl
yieldUnescaped '<!DOCTYPE html>'
html {
head {
// Use pageTitle layout property.
meta('http-equiv':'"Content-Type" content="text/html; charset=utf-8"')
title(pageTitle)
}
body {
section(id: 'main') {
// Render mainContents layout property.
mainContents()
}
section(){
h3 'Details'
}
section(id: 'test'){
testcontent()
}
}
}
我在他们的官方文档页面上尝试了fragment方法以及其他方法,因为它们没有我可以遵循的具体示例,因此很难遵循。