質問

NVelocityテンプレート内にインライン関数(メソッド)を作成したいと考えています。これに対する解決策は、使用することです ベロシマクロ. 。そこで、テストするために次のテンプレートをock笑しました。

#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 私の基本モデルオブジェクトであり、この例には1つのプロパティが含まれています。 Items, 、 これは List(Of Tuple(Of String, Integer, Date)). 。 SOのようなテストデータが入力されています:

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 #3/3/2003#まで評価する代わりに、文字通り「$ item.item3」です。 (ところで - これは、タプルの3つのアイテムのいずれかで発生します。 .Item 電話をかけるので、データ型ではありません)。

変数を作成して、それをうまく渡すことができます($ one1)。タプル自体を渡して、マクロ内の.itemプロパティ($ item.item2)を呼び出すことができますが、何らかの理由で電話することはできません .Item マクロに引数を渡すときのプロパティ。洞察はありますか?

役に立ちましたか?

解決

NVelocityマクロサポートは限られているようです。

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

別の方法は、ヘルパーを使用することです。

NVelocity ExtensionメソッドASP.NET WebForm

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top