マクロのベロシティ名前付きパラメータ
質問
私はいくつかのパラメータを取るマクロを持っています。これらのいくつかはオプションであり、パラメータが空のままの場合はそれがデフォルトに置き換えられます。
今の質問は、通常のWebデザイナーのための可能な限り、これは同じくらい簡単にする方法です。このケースを処理するために、私の例から離れて、他のpossibityはありますか?
例1:
ここで明らかな問題は、オプションの値です。
#macro (myTag $param1 $param2 $param3)
...
#end
実施例2:
そして、ここでの問題は、同じマクロが一度、すべての変数が再設定されていない以上使用される可能性の問題である。
#set ($param1="value1")
#set ($param2="value2")
#set ($param3="value3")
#macro (myTag)
...
#end
解決
のVelocity 1.6の時点では、オプションまたは名前付きパラメータがサポートされていません。私たちは、将来のリリースでは、それが利用可能に表示される場合がありますので、この機能を提出した最新のパッチがありました。
一方で、リストまたは値のマップを渡し考えます。たとえば、次のようにあなたがのparamsのマップに渡すことができます(ベロシティ1.5以上が必要です):
#macro(myMacro $p)
item 1: $p.param1
item 2: $p.param2
#end
#set($params = {"param1" : "val1", "param2":"val2"})
#myMacro($params)
ディスプレイます:
item 1: val1
item 2: val2
、オプションのパラメータを処理パラメータをチェックするマクロ内の#ifを使用します。マップに新しい要素を追加すると、少し厄介です。 Javaメソッド「置く」が値を返すので、あなたは戻り値を処分するの#setを使用する必要があります。 (それ以外の場合は、結果のテキストで表示されます)。
#macro(myMacro $p)
#if(!$p.param1)#set($dummy = $p.put("param1", "default1"))#end
#if(!$p.param2)#set($dummy = $p.put("param2", "default2"))#end
#if(!$p.param3)#set($dummy = $p.put("param3", "default3"))#end
item 1: $p.param1
item 2: $p.param2
item 3: $p.param3
#end
#set($params = {"param1" : "val1", "param2":"val2"})
#myMacro($params)
ディスプレイ
item 1: val1
item 2: val2
item 3: default3
所属していません StackOverflow