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?

Était-ce utile?

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:

NVelocity extension method ASP.NET webform

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top