Скоростные именованные параметры для макроса - PullRequest
3 голосов
/ 12 февраля 2009

У меня есть макрос, принимающий несколько параметров. Некоторые из них являются необязательными, и если параметр оставить пустым, он будет заменен значением по умолчанию.

Теперь вопрос в том, как сделать это максимально простым для обычного веб-дизайнера. Есть ли какая-либо другая возможность, кроме моих примеров, справиться с этим делом?

Пример 1:

Очевидная проблема здесь - необязательные значения.

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

Пример 2:

И здесь проблема является возможной, когда один и тот же макрос используется более одного раза и все переменные не устанавливаются снова.

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

#macro (myTag)
...
#end

1 Ответ

6 голосов
/ 27 февраля 2009

Начиная с 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)

1012 * отображает *

item 1: val1
item 2: val2
item 3: default3
...