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