2009-07-13 17 views
10

¿Hay alguna manera de hacer operadores ternarios en Velocity? Esto es lo que me gustaría hacer:operador condicional en Velocity

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

En lugar de gruesos

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

Cualquier idea si-si no?

Respuesta

6

Para tener experiencia y leer el VTL Reference, no hay forma de hacerlo. Si tienes muchas asignaciones como esta, tal vez podrías considerar definir tu propio velocimacro para intentar y evitar repetir el if else.

Por ejemplo, si la macro sólo imprime una sola cadena que podría hacer lo siguiente:

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

Las comillas dobles alrededor de la llamada a la macro son importantes, ya que significa que el lado derecho de la #set se analiza.

+0

¿Hay una manera de conseguir una macro para actuar como una función? Entonces, ¿devolverá una variable? Para poder hacer '#set ($ name = condOpt ($ args.get (0)," default "))' Si hice la macro, compruebe '$ args.get (0)' para ver si estaba vacío o no .. – peirix

+0

Si la macro solo imprime una sola cadena, puede configurarla a su nombre. Ver la edición de mi respuesta. – Mark

+0

Sí. Fueron esas comillas dobles alrededor de la macro llamada que me atraparon. Corregido y funcionando ahora. Gracias (: – peirix

2

que terminé haciendo como usted ha dicho, Mark:

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

Y entonces me puede llamar así:

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

¡Ocurrió que estaba agregando esto justo cuando estaba editando mi respuesta con el mismo ejemplo! – Mark

Cuestiones relacionadas