2014-03-02 128 views
0

我的一些FreeMarker宏具有接受其他宏的參數。這使我有一個頁面的標準部分,可以在奇怪的場合進行更改。在下面的例子中,文章宏將默認使用defaultHeader。有時我通過傳遞alternativeHeader宏作爲頭部參數來使用alternativeHeader。這工作正常。在FreeMarker中以自己的參數傳遞宏作爲參數

有時我想通過alternativeHeader宏但改變其文本參數。我知道如何做到這一點的唯一方法是創建另一個「調用者」宏,然後使用它。但是,這意味着我將不得不將這些「調用者」宏添加到很多頁面中,而只是看起來很雜亂。有另一種方法直接傳遞alternativeHeader宏,同時也設置其參數?

<html> 
    <head><title>test</title></head> 
    <body> 
     <@article body="First example"/> 
     <@article body="Second example" header=alternativeHeader/> 
     <@article body="Third example" header=alternativeHeaderCaller/> 
    </body> 
</html> 

<#-- 
    These three macros would usually be contained in a library. 
--> 
<#macro article body header=defaultHeader> 
    <div> 
     <@header/> 
     <br> 
     ${body} 
    </div> 
</#macro> 
<#macro defaultHeader> 
    This is a default header 
</#macro> 
<#macro alternativeHeader text="This is an alternative header"> 
    ${text} 
</#macro> 

<#-- 
    I want to avoid having to add and use this macro. 
--> 
<#macro alternativeHeaderCaller> 
    <@alternativeHeader text="I have changed this header"/> 
</#macro> 

輸出

<html> 
    <head><title>test</title></head> 
    <body> 
    <div> 
    This is a default header 
     <br> 
     First example 
    </div> 
    <div> 
    This is an alternative header 
     <br> 
     Second example 
    </div> 
    <div> 
    I have changed this header 
     <br> 
     Third example 
    </div> 
    </body> 
</html> 

我正在尋找這樣的事情

<@article body="Third example" header=alternativeHeaderCaller(text="My other text")/> 

回答

1

我怕你什麼都做不了好...有沒有「譁衆取寵」功能在FTL。