使用Groovy MarkupBuilder的HTML,如何优雅地混合标签和文本?

时间:2020-03-05 18:42:11  来源:igfitidea点击:

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

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(", ")
    }
  }
}

解决方案

回答

包括一个方法:

void text(n){
    builder.yield n
}

我们很可能(I)从具有文本方法的某个地方复制了此代码,但我们也没有复制该文本方法。由于MarkupBuilder接受标签名称的任何名称,并且浏览器会忽略未知的标记,因此它恰好起作用。

回答

实际上,现在推荐的方法是使用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>