2015-08-11 3 views
0

Я хочу написать тег, который может «обернуть» дочерний тег, и всегда передает все его атрибуты этому дочернему тегу. Таким образом, любые атрибуты, которые передаются в родительский тег, передаются дочернему. Идея состоит в том, чтобы создать тег, который может «украсить» несколько разных дочерних тегов и тем самым расширить их функциональность без изменения существующих тегов.Тег, который обертывает другой тег в grails?

Возможно ли это в грабелях?

Грубый набросок идеи:

// taglib 

def parentTag = { attrs, body -> 
    out << "<div class='parent'></div>" 
} 
def childTag1 = { attrs, body -> 
    // code 
} 
def childTag2 = { attrs, body -> 
    // code 
} 

В .gsp:

// view 
<mytaglib:ParentTag attr1="hello" attr2="world"> 
    </mytaglib:childTag1> 
</mytaglib:ParentTag 

<mytaglib:ParentTag attr1="hello" attr2="world"> 
    </mytaglib:childTag2> 
</mytaglib:ParentTag 

Результирующий HTML:

<div class='parent'> 
    <div attr1="hello" attr2="world"></div> 
</div> 
<div class='parent'> 
    <div attr1="hello" attr2="world"></div> 
</div> 

ответ

1

да, то в принципе можно сделать. этот пример должен делать то, что вы ожидаете от него:

def parentTag = {attrs, body -> 
    // do your decoration stuff 
    out << "<div>" 

    // call the child tag 
    out << childTag(attrs, body) 

    // do your decoration stuff 
    out << "</div>" 
} 

def childTag = {attrs, body -> 
    out << "<div attr1='" + attrs['attr1'] + "' attr2='" + attrs['attr2'] + "'></div>" 
} 
+0

Это будет работать только для одного конкретного дочернего тега «childTag». Я хочу использовать его для украшения нескольких тегов id_different_. –

+0

О, я вижу. что потребовало бы немного более синтаксического анализа атрибута тела, который я бы догадался. Возможно, вы посмотрите на плакат [decorator] (https://grails.org/plugin/decorator), чтобы дать вам хорошую отправную точку. –