Freemarker中的宏模板

时间:2016-12-15 13:17:55

标签: freemarker moqui

是否可以在其他ftl中直接使用DefaultScreenMacros.hmlt.ftl中定义的宏? 我在Moqui中创建了一个自定义组件,并且我使用ftls进行模板化,我想使用<@text\-line>将自动完成字段插入到ftl中,但它似乎不起作用。

我怀疑ftls不会自动包含DefaultScreenMacros.hmlt.ftl,我试图像这样手动包含它:

<#include "classpath://moqui/runtime/template/screen-macro/DefaultScreenMacros.html.ftl"/>

但仍然没有快乐。 有线索吗?

@ddekany 你是对的,我想出来了。这是一个问题,在moqui部分。路径是正确的,但我不确定它是否在类路径上。 无论如何,如果我在flt文件中添加所有宏(或者如果我放置一个本地有效的类路径)那么当我称它们为&lt; @ someMacro&gt;它们会失败,因为这些宏是为了处理xml而不是ftls。 例如这个宏:

<#macro container>
    <#assign divId><@nodeId .node/></#assign>
    <${.node["@type"]!"div"}<#if divId?has_content> id="${divId}"</#if><#if .node["@style"]?has_content> class="${ec.resource.expand(.node["@style"], "")}"</#if>>
    <#recurse>
    </${.node["@type"]!"div"}>
</#macro>

将处理xml,如:

<container id="test">
</container>

产生这个:

<div id="test">
</div>

如果我从包含该宏的ftl中调用,请执行以下操作:

<@container id="test">
</@container>

我明白了:

[Template Error: Macro "container" has no parameter with name "id". ---- FTL stack trace ("~" means nesting-related): - Failed at: #macro container [in template ...

有没有办法在不更改tha宏的情况下在ftl中调用它?

0 个答案:

没有答案