2008-08-22 4 views
3

Wenn ich Groovy MarkupBuilder verwende, habe ich Orte, an denen ich Text in das Dokument ausgeben muss, oder ich rufe eine Funktion auf, die Text in das Dokument ausgibt. Derzeit verwende ich das undefinierte Tag "text", um die Ausgabe auszuführen. Gibt es eine bessere Möglichkeit, diesen Code zu schreiben?HTML mit Groovy MarkupBuilder, wie kann ich Tags und Text elegant mischen?

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

Antwort

2

Fügen Sie eine Methode:

void text(n){ 
    builder.yield n 
} 

Höchstwahrscheinlich werden Sie (I) kopiert diesen Code von irgendwo, dass eine Text Methode hatte, aber Sie nicht auch den Text Methode kopiert haben. Da MarkupBuilder einen Namen für den Namen eines Tags akzeptiert und Browser unbekannte Markierungen ignorieren, funktionierte es einfach.

+0

Hinweis zu erzeugen, dass es nur funktioniert, wenn 'builder' nicht eine Instanz des' MarkupBuilder' ist ... – dedek

8

Eigentlich jetzt die empfohlene Methode zu verwenden, zum Beispiel

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

Was ist mkp? ist das die Instanz von MarkupBuilder? –

+2

@DavidW: Nein ist es nicht! Es würde ' der Text ... ' produzieren. 'mkp' ist ein spezieller Namespace, der verwendet wird, um vom normalen Baumodus des Builders wegzukommen und Zugriff auf Hilfsmarkierungsmethoden wie' yield' und 'yieldUnescaped' zu erhalten. Siehe http://docs.groovy-lang.org/latest/html/api/groovy/xml/MarkupBuilder.html#getMkp() – dedek

Verwandte Themen