2014-07-31 1 views
2

У меня есть следующий кусок коды для написания серии кнопок элементов, содержащего значок и текст:Groovy MarkupBuilder - не получая сырой текст

def tagcloud = { attrs, body -> 

    def mb = new MarkupBuilder(out) 

    mb.ul('class': 'list-inline') { 
     def tag = it 
     attrs.tags.split(",").each { 
      li { 
       button('class': 'btn btn-default', 'type': 'submit') { 
        i('class': 'fa fa-tag', '') 
        mb.yield('test') 
       } 
      } 
     } 
    } 
} 

Однако я нахожу при использовании функции текучести, что строитель разметка выводит вызов доходности в качестве тега в моем HTML, а затем исходный текст:

<li> 
    <button class="btn btn-default" type="submit"> 
     <i class="fa fa-tag"></i> 
     <yield>test</yield> 
    </button> 
</li> 

на основании своих исследований, это рекомендуемый способ сделать это: HTML using Groovy MarkupBuilder, how do I elegantly mix tags and text?

Кто-нибудь знает, почему этот текст обернут это понравилось?

Я использую Grails 2.3.8.

ответ

5

Просто так:

def tagcloud = { attrs, body -> 

    def mb = new MarkupBuilder(out) 

    mb.ul('class': 'list-inline') { 
     def tag = it 
     attrs.tags.split(",").each { 
      li { 
       button('class': 'btn btn-default', 'type': 'submit') { 
        i('class': 'fa fa-tag', '') 
        mkp.yield('test') 
       } 
      } 
     } 
    } 
} 

MKP является особым пространством имен используются, чтобы избежать от нормального здания режима строителя и получить доступ к методам хелперов разметки, таким как «выход» и «yieldUnescaped». Дополнительную информацию см. На странице javadoc for getMkp().