NVelocity paramètre macro ne pas évaluer
Question
Je cherche à créer une fonction en ligne (méthode) dans mon modèle NVelocity. La solution à ce qui semble être utiliser Velocimacros . Alors, je raillé le modèle suivant à tester:
#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
est ma base modèle objet qui, pour cet exemple contient une propriété, Items
, qui est un List(Of Tuple(Of String, Integer, Date))
. Avec des données de test comme ceci:
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
Quand je lance le modèle, le problème que je vais avoir est que la sortie du paramètre macro $three
est littéralement « item.Item3 $ » au lieu d'évaluer à # 3/3/2003 #. . (BTW - cela se produit avec l'un des 3 éléments du tuple si elles sont prises à l'appel .Item
, il est donc pas le type de données)
Je peux faire une variable et passer très bien (une1 $). Je peux passer le tuple lui-même et appeler la propriété .Item dans la macro ($ item.Item2), mais pour une raison que je ne peux pas appeler la propriété .Item
en passant l'argument à la macro. Toute idée?
La solution
It looks like NVelocity macro support is limited.
http://www.castleproject.org/others/nvelocity/problems.html#macros
An alternative would be to use Helpers: