1

freemarkerでマクロを実行しようとしていますが、cssクラスをパラメーターとして実装するのに問題があります。私のオブジェクトにはいくつかのデフォルトのcssクラスがあり、オプションのクラスを追加したいと思います。

<#macro Button href extra...>
    <a href="${href}" class="ui-button"
    <#list extra?keys as attr>
    ${attr}="${extra[attr]?html}"
    </#list>
    >Anchor Button</a>
</#macro>

1) <@Button href="link.html"></@Button>
2) <@Button href="link.html" id="button1" class="marginrightnone"></@Button>

2)行目は、「id」パラメーターのみをレンダリングしています。マクロのclass="ui-button"を削除すると、正しくレンダリングされます。

2つ以上のクラスパラメータをレンダリングするために何ができるでしょうか?

4

1 に答える 1

2

classすべてのクラスパラメータを含む文字列を作成し、それをテンプレート内の単一のHTML属性の値として使用する必要があります。

class属性と値のペアを任意の数にすることはできませんが、それでも正当なHTMLである必要があります。

基本的に今持っている最も簡単なのは、"ui-button"値を含むローカルを作成することです。キーを繰り返しextra?keysチェックし、"class"見つかった場合は、ローカルクラスに(先頭のスペースとともに)追加します。テンプレートは、その構築された値を使用します。

<a href="${href}" classes="${local_classes}"
于 2013-02-22T20:48:11.373 に答える