【问题标题】:HTML using Groovy MarkupBuilder, how do I elegantly mix tags and text?HTML 使用 Groovy MarkupBuilder,如何优雅地混合标签和文本?
【发布时间】:2008-08-22 18:47:03
【问题描述】:

当使用 Groovy MarkupBuilder 时,我有一些地方需要将文本输出到文档中,或者调用将文本输出到文档中的函数。目前,我正在使用未定义的标签 "text" 来进行输出。有没有更好的方法来编写这段代码?

li {
  text("${type.getAlias()} blah blah ")
  function1(type.getXYZ())
  if (type instanceof Class1) {
    text(" implements ")
    ft.getList().each { 
      if (it == '') return
      text(it) 
      if (!function2(type, it)) text(", ")
    }
  }
}

【问题讨论】:

    标签: html groovy


    【解决方案1】:

    其实现在推荐的方式是使用mkp.yield,例如,

    src.p {
        mkp.yield 'Some element that has a '
        strong 'child element'
        mkp.yield ' which seems pretty basic.'
    }
    

    生产

    <p>Some element that has a <strong>child element</strong> which seems pretty basic.</p>
    

    【讨论】:

    • 什么是mkp?那是 MarkupBuilder 的实例吗?
    • @DavidW:不,不是!它会产生&lt;yield&gt; the text ... &lt;/yield&gt;mkp 是一个特殊的命名空间,用于脱离构建器的正常构建模式,并访问辅助标记方法,例如 yieldyieldUnescaped。见docs.groovy-lang.org/latest/html/api/groovy/xml/…
    【解决方案2】:

    包含一个方法:

    void text(n){
        builder.yield n
    }
    

    您(我)很可能从具有 text 方法的某个地方复制了此代码,但您没有同时复制 text 方法。由于 MarkupBuilder 接受任何名称作为标签的名称,并且浏览器会忽略未知的标记,因此它恰好可以工作。

    【讨论】:

    • 请注意,它仅在builder 不是MarkupBuilder 的实例时才有效...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多