2008-08-22 9 views
3

Lors de l'utilisation de Groovy MarkupBuilder, j'ai des endroits où je dois sortir du texte dans le document, ou appeler une fonction qui affiche du texte dans le document. Actuellement, j'utilise le tag "texte" non défini pour faire la sortie. Y a-t-il une meilleure façon d'écrire ce code?HTML utilisant Groovy MarkupBuilder, comment mélanger élégamment les balises et le texte?

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

Répondre

2

Inclure une méthode:

void text(n){ 
    builder.yield n 
} 

Très probablement, vous (I) copié ce code de quelque part qui avait une méthode de texte, mais vous ne copiez pas aussi la méthode de texte. Depuis MarkupBuilder accepte n'importe quel nom pour le nom d'une balise et les navigateurs ignorent le balisage inconnu, il est juste arrivé à travailler.

+0

Notez que cela fonctionne uniquement lorsque 'builder' n'est pas une instance de la' MarkupBuilder' ... – dedek

8

En fait, la méthode recommandée est maintenant d'utiliser , par exemple,

src.p { 
    mkp.yield 'Some element that has a ' 
    strong 'child element' 
    mkp.yield ' which seems pretty basic.' 
} 

pour produire

<p>Some element that has a <strong>child element</strong> which seems pretty basic.</p> 
+1

Qu'est-ce que mkp? est-ce l'instance de MarkupBuilder? –

+2

@DavidW: Non ce n'est pas! Il produirait ' le texte ...'. 'mkp' est un espace de noms spécial utilisé pour échapper au mode de construction normal du constructeur et avoir accès aux méthodes de balisage d'aide telles que' yield' et 'yieldUnescaped'. Voir http://docs.groovy-lang.org/latest/html/api/groovy/xml/MarkupBuilder.html#getMkp() – dedek

Questions connexes