我希望在我的 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
是我的基础模型对象,在本例中它包含一个属性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
调用传递,就会发生这种情况,所以这与数据类型无关)。
我可以创建一个变量并很好地传递它($one1)。.Item
我可以传递元组本身并在宏 ($item.Item2) 中调用 .Item 属性,但由于某种原因,在将参数传递给宏时我无法调用该属性。有什么见解吗?