2011-08-02 9 views
15

Estoy tratando de encontrar la manera de devolver un valor desde una macro llamada velocidad y asignarlo a un varaiblellamando a la función macro en la plantilla de velocidad

mi función de macro se ve algo como esto. su vez en las macros compartidas Archivos comunes

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

Soy necesidad de asignar el resultado de esta macro a una variable en otro archivo de plantilla de velocidad

Probé algo como esto

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

pero hice no trabajo. Intenté con #, $ y sin nada en frente de la función getBookListLink. pero nada funcionó. ¿No puedo regresar de una macro? algo mal con mi macro?

Pero, como tal, si llamo #getBookListLink ($ readingTrackerResult) por separado en el archivo html. funciona y puedo imprimir el resultado a la IU. Pero no se puede asignar a una variable.

+0

Tengo un problema con espacios adicionales cuando realizo esta llamada. Lamentablemente, incluso utilizando el truco con comentarios ('##'), al final de la línea, no funcionó. – Dherik

Respuesta

25

Las macros no son funciones; son para dar salida. Sin embargo, si no le importa perder el tipo y conseguir el resultado como texto ...

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

@ nathan..it funciona, gracias –

+2

En el caso, si la función espera un argumento de cadena, entonces tenemos que usar de la siguiente manera: '#set ($ book_list_link =" #getBookListLink ('string_argument') ")' –

5

para deshacerse de los espacios y líneas en blanco utilizar los comentarios multilínea (#* comment *#):

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

O simplemente escribir todo en la misma línea:

#macro(myMacro $param) the_return_value #end 
0

en lugar de vivir con las limitaciones de cuerda para '' valores de retorno, preferiblemente una variable de resultado definida externamente se puede pasar 'por referenc e ', por ejemplo .:

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

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