3

いくつかのパラメーターをとるマクロがあります。これらの一部はオプションであり、パラメータを空のままにすると、デフォルトに置き換えられます。

ここで問題となるのは、これを通常のWebデザイナーにとって可能な限り簡単にする方法です。このケースを処理するために、私の例以外に他の可能性はありますか?

例1:

ここでの明らかな問題は、オプションの値です。

#macro (myTag $param1 $param2 $param3)
...
#end

例2:

そして、ここで問題は、同じマクロが複数回使用され、すべての変数が再度設定されない場合に発生する可能性のある問題です。

#set ($param1="value1") 
#set ($param2="value2") 
#set ($param3="value3") 

#macro (myTag)
...
#end
4

2 に答える 2

6

Velocity 1.6 の時点では、オプションまたは名前付きパラメーターはサポートされていません。この機能を含む最近のパッチが提出されたため、将来のリリースで利用可能になる可能性があります。

それまでの間、値のリストまたはマップを渡すことを検討してください。たとえば、次のようにパラメーターのマップを渡すことができます (Velocity 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 メソッド「put」は値を返すため、#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
于 2009-02-27T04:09:15.423 に答える