Я хочу создать встроенную функцию (метод) внутри моего шаблона NVelocity.Решением для этого является использование Velocimacros .Итак, я смоделировал следующий шаблон для проверки:
#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
- это мой базовый объект Model, который для этого примера содержит одно свойство, Items
, которое является List(Of Tuple(Of String, Integer, Date))
.Заполняется тестовыми данными примерно так:
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
Когда я запускаю шаблон, у меня возникает проблема, заключающаяся в том, что выход из параметра макроса $three
в буквальном смысле "$ item.Item3" вместо оценкидо # 3/3/2003 #.(Кстати, это происходит с любым из 3 элементов в кортеже, если они передаются с помощью вызова .Item
, поэтому речь не идет о типе данных).
Я могу создать переменную и передать еепросто отлично ($ 1).Я могу передать сам кортеж и вызвать свойство .Item внутри макроса ($ item.Item2), но по какой-то причине я не могу вызвать свойство .Item
при передаче аргумента в макрос.Любое понимание?