2008-08-22 3 views
3

При использовании Groovy MarkupBuilder у меня есть места, где мне нужно вывести текст в документ или вызвать функцию, которая выводит текст в документ. В настоящее время я использую неопределенный тег «текст» для вывода. Есть ли лучший способ написать этот код?HTML с помощью 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(", ") 
    } 
    } 
} 

ответ

2

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

void text(n){ 
    builder.yield n 
} 

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

+0

Обратите внимание, что она работает только тогда, когда 'builder' не является экземпляром' MarkupBuilder' ... – dedek

8

На самом деле, рекомендуемый способ в настоящее время является использование , например,

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> 
+1

Что такое mkp? это экземпляр MarkupBuilder? –

+2

@DavidW: Нет, это не так! Это громко произвело ' текст ...'. 'mkp' - специальное пространство имен, используемое для выхода из нормального режима построения строителя и получения доступа к вспомогательным методам разметки, таким как' yield' и 'yieldUnescaped'. См. Http://docs.groovy-lang.org/latest/html/api/groovy/xml/MarkupBuilder.html#getMkp() – dedek

Смежные вопросы