0

FreeMarker テンプレートの 1 つに、次のようなマクロのペアがあります。

<#macro RepeatTwice><#nested 1><#nested 2></#macro>

<#macro Destinations>
<#assign DestinationList = []>
<@RepeatTwice ; Index>
<#assign City == some XPath expression dependant on the index>
<#if City == something>
<#assign DestinationList = DestinationList + ["some string"]>
<#elseif City == something else>
<#assign DestinationList = DestinationList + ["some string"]>
</#if>
</@>
</#macro>

だから今、私の宛先リストには2つの値が含まれています. これは、挿入した場合、${DestinationList[0]}または期待される出力を取得する${DestinationList[1]}前に機能します。</#macro>

私の質問は --- 別のテンプレートで、このマクロからリスト全体をキャプチャして、必要なときにその要素にアクセスできるようにしたいと考えています。

このためには、リストの要素だけでなく、リスト全体を返すマクロが必要です。

ただし、DestinationList を挿入する${DestinationList}か、単に DestinationList を挿入するとエラーが返されます。

などをやってみ${DestinationList[0,1]}ましたが、何もうまくいかないようです。

これは可能ですか?

ありがとう、

バジル

4

1 に答える 1

0

マクロ (およびディレクティブ) は、値を計算するためではなく、出力に出力するため (およびその他の副作用を持つため) です。ここで関数を定義する必要があります。#functionの代わりに使用すると、 を使用して任意の値 (リストなど) を返すこと#macroができます。#return

また、${expression}常に値を文字列に変換することに注意してください。そのため、エラーが発生します。

于 2012-07-24T12:48:44.113 に答える