Macro parametro macro nvelocity non valutando
Domanda
Sto cercando di creare una funzione inline (metodo) all'interno del mio modello Nvelocity. La soluzione a questo sembra essere usare Velocimacros. Quindi, ho deriso il seguente modello per testare:
#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
è il mio oggetto modello base, che per questo esempio contiene una proprietà, Items
, il quale è un List(Of Tuple(Of String, Integer, Date))
. Popolato con dati di test come così:
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
Quando eseguo il modello, il problema che sto riscontrando è che l'output dal parametro macro $three
è letteralmente "$ item.item3" invece di valutare al numero 3/3/2003 #. (Btw - questo accade con uno dei 3 elementi nella tupla se vengono passati con il .Item
Chiama, quindi non riguarda il tipo di dati).
Posso fare una variabile e passarla bene ($ one1). Posso passare la tupla stessa e chiamare la proprietà .item all'interno della macro ($ item.item2), ma per qualche motivo non posso chiamare il .Item
Proprietà quando si passa l'argomento alla macro. Qualche intuizione?
Soluzione
Sembra che il supporto macro di Nvelocity sia limitato.
http://www.castleproject.org/thers/nvelocity/problems.html#macros
Un'alternativa sarebbe quella di usare gli aiutanti: