Groovy MarkupBuilder - 不会产生原始文本

cwe*_*ton 2 html grails groovy taglib markupbuilder

我有以下大量代码用于写出一系列按钮元素,包含图标和文本:

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')
                }
            }   
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我发现在使用yield函数时,标记生成器将yield调用作为我的html中的标记输出,而不是原始文本:

<li>
    <button class="btn btn-default" type="submit">
      <i class="fa fa-tag"></i>
      <yield>test</yield>
    </button>
</li>
Run Code Online (Sandbox Code Playgroud)

基于我的研究,这是推荐的方法:使用Groovy MarkupBuilder的HTML,如何优雅地混合标签和文本?

有谁知道为什么这个文字被包裹喜欢这个?

我使用的是Grails 2.3.8.

Fab*_*oli 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')
                }
            }   
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

mkp是一个特殊的命名空间,用于摆脱构建器的正常构建模式,并访问辅助标记方法,如'yield'和'yieldUnescaped'.有关更多详细信息,请参阅getMkp()javadoc.