Nelvelocity Macro Parameter no evaluar
Pregunta
Estoy buscando crear una función en línea (método) dentro de mi plantilla de nvelocity. La solución a esto parece ser usar Velocidad. Entonces, me burlé de la siguiente plantilla para probar:
#macro( getOutput $one $two $three )
<td>$one</td>
<td>$two.Item2</td>
<td>$three</td>
#end
<table>
#foreach( $item in $mdl.Items )
<tr>
#set( $one1 = $item.Item1 )
#getOutput( $one1 $item $item.Item3 ) ## item.Item3 won't evaluate!
</tr>
#end
</table>
$mdl
es mi objeto de modelo base, que para este ejemplo contiene una propiedad, Items
, el cual es un List(Of Tuple(Of String, Integer, Date))
. Poblado con datos de prueba como así:
Dim items As New List(Of Tuple(Of String, Integer, DateTime))
With items
.Add(New Tuple(Of String, Integer, DateTime)("One", 1, #1/1/2001#))
.Add(New Tuple(Of String, Integer, DateTime)("Two", 2, #2/2/2002#))
.Add(New Tuple(Of String, Integer, DateTime)("Three", 3, #3/3/2003#))
End With
Cuando ejecuto la plantilla, el problema que tengo es que la salida del parámetro macro $three
es literalmente "$ item.Item3" en lugar de evaluar al #3/3/2003 #. (Por cierto: esto sucede con cualquiera de los 3 elementos en la tupla si se pasan con el .Item
Llame, para que no se trata del tipo de datos).
Puedo hacer una variable y pasarlo bien ($ One1). Puedo pasar la tupla misma y llamar a la propiedad .Item dentro de la macro ($ item.Item2), pero por alguna razón no puedo llamar al .Item
propiedad al pasar el argumento a la macro. ¿Alguna idea?
Solución
Parece que el soporte macro de Nvelocity es limitado.
http://www.castleproject.org/others/nvelocity/problems.html#macros
Una alternativa sería usar ayudantes: