При использовании 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(", ")
}
}
}






Включите метод:
void text(n){
builder.yield n
}
Скорее всего, вы (я) скопировали этот код откуда-то, где был текстовый метод, но вы также не копировали текстовый метод. Поскольку 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>
Что такое мкп? это экземпляр MarkupBuilder?
@DavidW: Нет, это не так! Он будет производить <yield> the text ... </yield>. mkp - это специальное пространство имен, используемое для выхода из обычного режима построения строителя и получения доступа к вспомогательным методам разметки, таким как yield и yieldUnescaped. См. docs.groovy-lang.org/latest/html/api/groovy/xml/…
Обратите внимание, что это работает, только если
builderне является экземпляромMarkupBuilder...