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")/>