Вызов функции макроса в шаблоне Velocity

Я пытаюсь выяснить, как вернуть значение из макрокоманды скорости и назначить его для varaible

моя макрофункция выглядит примерно так. его общий доступ к общим файлам макросов

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

Мне нужно присвоить результат этого макроса переменной в другом файле шаблона скорости

Я пробовал что-то вроде этого

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

но не работает. Я попытался С#, $и ничего перед функцией getBookListLink. но ничего не получилось. Не могу я вернуться из макроса? что-то не так с моим макросом?

Но, так, если я вызываю #getBookListLink ($ readTrackerResult) отдельно в html файле. он работает, и я могу напечатать результат в пользовательском интерфейсе. Но не может назначить переменную.

Ответы

Ответ 1

Макросы не являются функциями; они предназначены для вывода вывода. Однако, если вы не против потерять тип и получить результат как текст...

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

Ответ 2

Чтобы избавиться от пробелов и пустых строк, используйте многострочные комментарии (#* comment *#):

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

Ответ 3

Вместо того, чтобы жить со строковыми ограничениями для "возвращаемых значений", предпочтительно переменная результата, определяемая извне, может передаваться "по ссылке", например:

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

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

Ответ 4

Параметр макроса может быть списком объектов. Вызываемый макрос может извлекать каждый объект из списка, манипулировать им, а затем вызывающий видит изменения.

#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

Ответ 5

Или просто напишите все на одну строку:

#macro( myMacro $param ) the_return_value #end