我正在尋找在我的NVelocity模板內創建一個內聯函數(方法)。解決方案似乎是使用Velocimacros。所以,我嘲笑了下面的模板測試:NVelocity宏參數沒有評估
#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 /二千○三分之三#。 (順便說一句,如果元組通過.Item
調用傳遞,則元組中的任何元素都會發生這種情況,所以它不是數據類型)。
我可以做一個變量,並通過它就好($ one1)。我可以傳遞元組本身並調用宏($ item.Item2)中的.Item屬性,但由於某種原因,我無法在將參數傳遞給宏時調用.Item
屬性。任何見解?
我有同樣的問題。你有沒有找到解決方案? – KClough 2011-11-16 15:21:20
不,我完全沒有。我只需要做一些工作。 – mattmc3 2011-11-17 14:52:00