web-dev-qa-db-ja.com

Velocityテンプレートでマクロ関数を呼び出す

速度マクロ呼び出しから値を返し、それを変数に割り当てる方法を理解しようとしています

私のマクロ関数は次のようになります。そのかつての共通の共有マクロファイル

#macro(getBookListLink, $readingTrackerResult)
   $readingTrackerResult.getBookListLink()
#end

このマクロの結果を別の速度テンプレートファイルの変数に割り当てる必要があります

私はこのようなことを試みました

#set($book_list_link = #getBookListLink( $readingTrackerResult ))

しかし、動作しませんでした。関数getBookListLinkの前に#、$を何も付けずに試しました。しかし、何も機能しませんでした。マクロから戻ることはできませんか?私のマクロに何か問題がありますか?

ただし、HTMLファイルで#getBookListLink($ readingTrackerResult)を個別に呼び出すと、そのようになります。それは機能し、結果をUIに出力できます。ただし、変数に割り当てることはできません。

18
user747858

マクロは関数ではありません。それらは出力をレンダリングするためのものです。ただし、タイプを失って結果をテキストとして取得してもかまわない場合は...

#set( $book_list_link = "#getBookListLink( $readingTrackerResult )" )
28
Nathan Bubna

スペースと空白行を取り除くには、複数行コメント(#* comment *#):

#macro( myMacro $param )#*
  *#the_return_value#*
*##end

'戻り値'の文字列制限を使用する代わりに、外部で定義された結果変数を '参照によって'渡すことができます。例:

#macro(getBookListLink $inTrackerResult $outBookListLink)
    #if ($outBookListLink)
        #set ($outBookListLink = $inTrackerResult.getBookListLink())
    #end
#end

#set ($myLink = "")
#getBookListLink($myTrackerResult $myLink)
myBookListLink = "$myLink"<br/>
1
Steffen

マクロパラメータは、オブジェクトのリストにすることができます。呼び出されたマクロは、リストから各オブジェクトを抽出して操作することができ、呼び出し元は変更を確認できます。

#macro(call $something)
  #set($swallowOutput = $something)
#end

#macro(doSomething $out)
  #set($list=$out.get(0))
  #call($list.add("hallo-1")
  #call($list.add("hallo-2")
#end

#macro(doMoreComplexStuff)
  #set($myList=[])
  #doSomething([$myList])
  MyList now has $myList.size()) elements: $myList
#end
0
Axel Heider