2009-07-13 7 views
10

Gibt es eine Möglichkeit, ternäre Operatoren in Velocity zu verwenden? Dies ist, was würde ich tun:Bedingter Operator in Velocity

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

statt klobig if-else

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

Irgendwelche Ideen?

Antwort

6

Für Erfahrung und das Lesen der VTL Reference gibt es keine Möglichkeit, dies zu tun. Wenn Sie viele solcher Aufgaben hätten, könnten Sie vielleicht Ihr eigenes Velocimacro definieren, um zu vermeiden, das if else zu wiederholen.

Zum Beispiel, wenn das Makro nur eine einzelne Zeichenfolge druckt könnten Sie wie folgt vorgehen:

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

Die doppelte Anführungszeichen um den Makroaufruf wichtig sind wie das bedeutet, die RHS des #set analysiert wird.

+0

Gibt es eine Möglichkeit, ein Makro zu wirken wie eine Funktion zu bekommen? Damit es eine Variable zurückgibt? So, dass ich '#set ($ name = condOpt ($ args.get (0)," default ")) machen könnte. Wenn ich das Makro gemacht habe, überprüfe' $ args.get (0) ', um zu sehen, ob es funktioniert war leer oder nicht .. – peirix

+0

Wenn das Makro nur eine einzelne Zeichenfolge ausgibt, können Sie es auf einen Namen festlegen. Siehe die Bearbeitung meiner Antwort. – Mark

+0

Yup. Es waren diese Anführungszeichen um den Makroaufruf, die mich erwischten. Behoben und funktioniert jetzt. Danke (: – peirix

2

landete ich tun, wie Sie gesagt, Mark:

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

Und dann kann ich es wie so nennen:

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

) Du hast das gerade hinzugefügt, als ich meine Antwort mit dem gleichen Beispiel bearbeitet habe !! – Mark