HTML с использованием Groovy MarkupBuilder, как мне элегантно смешать теги и текст?

При использовании Groovy у MarkupBuilderменя есть места, где мне нужно выводить текст в документ или вызывать функцию, которая выводит текст в документ. В настоящее время я использую неопределенный тег «текст», чтобы сделать вывод. Есть ли лучший способ написать этот код?

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(", ")
    }
  }
}
22.08.2008 18:47:03
2 ОТВЕТА

Включить метод:

void text(n){
    builder.yield n
}

Скорее всего, вы (я) скопировали этот код откуда-то, у которого был текстовый метод, но вы также не копировали текстовый метод. Поскольку MarkupBuilder принимает любое имя для имени тега, а браузеры игнорируют неизвестную разметку, это просто сработало.

2
22.08.2008 23:25:38
Обратите внимание, что это работает, только когда builderне является экземпляром MarkupBuilder...
dedek 19.02.2015 09:23:01

На самом деле, рекомендуемый способ сейчас заключается в использовании 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>
8
17.09.2008 10:27:31
Что такое МКП? это экземпляр MarkupBuilder?
David W 21.02.2014 00:37:30
@ ДэвидW: Нет, это не так! Это будет производить <yield> the text ... </yield>. mkpэто специальное пространство имен, используемое для выхода из обычного режима построения компоновщика и получения доступа к вспомогательным методам разметки, таким как yieldи yieldUnescaped. См docs.groovy-lang.org/latest/html/api/groovy/xml/...
dedek 26.03.2015 11:58:55