2011-06-14 100 views
2

我正在尋找在我的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屬性。任何見解?

+0

我有同樣的問題。你有沒有找到解決方案? – KClough 2011-11-16 15:21:20

+0

不,我完全沒有。我只需要做一些工作。 – mattmc3 2011-11-17 14:52:00

回答