2009-07-13 3 views
10

Есть ли способ сделать тройные операторы в скорости? Это то, что я хотел бы сделать:условный оператор в Velocity

#set ($name = ($args.get(0) == "") ? "default" : $args.get(0)) 

Вместо коренастый если-то еще

#if ($args.get(0) == "") 
    #set ($name = "default") 
#else 
    #set ($name = $args.get(0)) 
#end 

Любые идеи?

ответ

6

Для получения опыта и чтения VTL Reference нет способа сделать это. Если бы у вас было много таких заданий, возможно, вы могли бы взглянуть на определение своего собственного велосимакро, чтобы попытаться избежать повторения if else.

Например, если макрос печатает только одну строку, вы можете сделать следующее:

#set ($name = "#condOpt($args.get(0), "default")") 

двойные кавычки вызова макроса являются важными, как это означает, что RHS в #set разбирается.

+0

Есть ли способ, чтобы получить макрос, чтобы действовать как функция? Так что он вернет переменную? Так что я мог бы делать '#set ($ name = condOpt ($ args.get (0)," default "))) Если я сделал макрос, сделайте проверку на' $ args.get (0) ', чтобы увидеть, был пуст или нет. – peirix

+0

Если макрос печатает только одну строку, вы можете установить ее имя. См. Изменение в моем ответе. – Mark

+0

Yup. Это были те двойные кавычки вокруг вызова макроса, которые меня поймали. Исправлено и работает сейчас. Спасибо (: – peirix

2

Я закончил тем, что делал, как вы сказали, Марк:

#macro(condOp $check, $default) 
    #if ($check == "") 
     $default 
    #else 
     $check 
    #end 
#end 

И тогда я могу назвать это так:

#set ($name = "#condOp($args.get(0), 'default')") 
+0

Вы случайно добавили это, так как я редактировал свой ответ с тем же примером! – Mark