2017-09-12 1 views
1

Dans un Grails taglib J'utilise le constructeur de balisage pour la création d'un balisage qui ressemble à ceciDévelopper les propriétés des objets comme des attributs balisage

a(href: '#', class: 'show-modal', properties) { 
    mkp.yield '+' 
} 

Dans ce cas propriétés est un ensemble en forme de propriétés d'objet: {data-internet=true, data-desc=Lorem ipsum}

J'ai besoin d'étendre les propriétés en tant qu'attributs de données html5. pour obtenir quelque chose comme ça.

<a href="#" class="show-modal" data-internet=true, data-desc=Lorem ipsum>

En ce moment, au lieu de cela, je reçois ce résultat

<a href="#" class="show-modal">{data-internet=true, data-desc=Lorem ipsum}+</a>

C'est un Grails taglib échantillon:

def test = { attrs -> 
    MarkupBuilder markupBuilder = new MarkupBuilder(out) 

    Map properties = ['data-internet': true, 'data-desc': 'Lorem ipsum...'] 

    markupBuilder.a(href: '', properties) { 
     mkp.yield 'More info' 
    } 
} 

Lorsque d'une vue que je Render <g:test/> je reçois ceci:

<a href="">{data-internet=true, data-desc=Lorem ipsum...}More info</a>

Et je m'y attendais:

<a href="" data-internet='true', data-desc='Lorem ipsum...'>More info</a>

Merci pour votre temps et pour une idée

+1

Pouvez-vous changer votre exemple afin qu'il puisse être exécuté et afficher la sortie que vous dites y Vous obtenez? –

+0

Merci @tim_yates. Je viens d'ajouter un échantillon – user615274

+1

Pas à un ordinateur, mais avez-vous essayé l'opérateur spread-map: 'markupBuilder.a (href: '', *: propriétés)' –

Répondre

2

Vous pouvez utiliser l'OPERATEUR-carte pour déballer la carte et passer chaque entrée comme si c'était un paramètre:

markupBuilder.a(href: '', *:properties) { 
    mkp.yield '+' 
}