我有以下大量代码用于写出一系列按钮元素,包含图标和文字:
def tagcloud = { attrs, body ->
def mb = new MarkupBuilder(out)
mb.ul('class': 'list-inline') {
def tag = it
attrs.tags.split(",").each {
li {
button('class': 'btn btn-default', 'type': 'submit') {
i('class': 'fa fa-tag', '')
mb.yield('test')
}
}
}
}
}
但是,我发现在使用yield函数时,标记生成器将yield调用作为我的html中的标记输出,而不是原始文本:
<li>
<button class="btn btn-default" type="submit">
<i class="fa fa-tag"></i>
<yield>test</yield>
</button>
</li>
根据我的研究,这是推荐的方法:HTML using Groovy MarkupBuilder, how do I elegantly mix tags and text?
有谁知道为什么这个文字被包裹喜欢这个?
我使用的是Grails 2.3.8。
答案 0 :(得分:5)
就这样:
def tagcloud = { attrs, body ->
def mb = new MarkupBuilder(out)
mb.ul('class': 'list-inline') {
def tag = it
attrs.tags.split(",").each {
li {
button('class': 'btn btn-default', 'type': 'submit') {
i('class': 'fa fa-tag', '')
mkp.yield('test')
}
}
}
}
}
mkp是一个特殊的命名空间,用于摆脱构建器的正常构建模式,并可以访问辅助标记方法,例如&#39; yield&#39;和&#39; yieldUnescaped&#39;。有关详细信息,请参阅javadoc for getMkp()。