2

私は NVelocity を使用するのにかなり慣れていません。会社の古いテンプレートのいくつかを編集しようとしていますが、理解できないこのエラーが発生します。テンプレートでは、注文に複数の出荷がある場合は複数の出荷名を表示し、1 つだけの場合は 1 つの出荷名のみを表示します。複数の出荷がある場合は正常に動作しますが、出荷が1つしかない場合は、どういうわけかテンプレートが必要なシメント名をレンダリングせず、代わりにクラス名を出力します。

 #if($order.Shipments.Count > 1) 
 #foreach($shipment in $order.Shipments)
 #beforeall 
 #each 
 $shipment.ShipMethodName <strong>|</strong> 
 #else
 $order.Shipments[0].ShipMethodName  // in emails it renders "Orders.OrderShipmentCollection[0].ShipMethodName"
 #end
 #end

助けてください。

4

1 に答える 1

1

これは古い質問であることは知っていますが、誰かが後で解決策を探している場合に備えて、回答が受け入れられていない古い質問を行っていたので、回答を投稿すると思いました。昨年 9 月にそのコメントを投稿したときに、どうしてエラーに気付かなかったのかわかりません。

$order.Shipments[0].ShipMethodNameNVelocityは C# のようなインデクサーをサポートしていないため、このメソッドOrders.OrderShipmentCollection[0].ShipMethodNameを使用する必要があります。つまり、C# コンパイラがインデクサー用に作成する基になるメソッドです。get_Item()$order.Shipments.get_Item(0).ShipMethodName

何が起こっているかというと、$order.Shipments型名 ( Orders.OrderShipmentCollection) が出力され、残り[0].ShipMethodNameは逐語的に出力されます。

于 2014-10-03T08:28:53.680 に答える