2014-03-02 84 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。