Параметр макроса NVelocity не оценивается - PullRequest
2 голосов
/ 14 июня 2011

Я хочу создать встроенную функцию (метод) внутри моего шаблона 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 при передаче аргумента в макрос.Любое понимание?

1 Ответ

2 голосов
/ 16 ноября 2011

Похоже, поддержка макросов NVelocity ограничена.

http://www.castleproject.org/others/nvelocity/problems.html#macros

Альтернативой может быть использование помощников:

Метод расширения NVelocity ASP.NET webform

...