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?

¿Fue útil?

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:

Método de extensión de nvelocity ASP.NET WebForm

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top