Freemarker:从JavaScript函数调用宏

Freemarker:从JavaScript函数调用宏,javascript,freemarker,Javascript,Freemarker,我有一个像这样的freemarker宏 <#assign xmlNode = parseXML("<field name='dropDown' type='select' valueName='COUNTRY'/>")>; <#import "utilFields.ftl" as util /> <div> <@util.createDropdown field=xmlNode/> </di

我有一个像这样的freemarker宏

<#assign xmlNode = parseXML("<field name='dropDown' type='select' valueName='COUNTRY'/>")>;
    <#import "utilFields.ftl" as util />
     <div>
      <@util.createDropdown field=xmlNode/>
     </div>

我假设您希望将
@util.createDropdown
生成的HTML插入JavaScript字符串文本中。(你不能直接调用FreeMarker form JavaScript,因为两者在不同的时间运行。)简单的方法是:

<#-- Not safe! -->
var dropdown = "<@util.createDropdown field=xmlNode/>";

jsStr
宏将打印在其中的内容(不需要在其中进行单个宏调用,它可以是任何内容)转换为有效的JavaScript字符串文字。

谢谢@ddekany。这太棒了。
FreeMarker template error:
A macro cannot be called in an expression.
<#-- Not safe! -->
var dropdown = "<@util.createDropdown field=xmlNode/>";
<#macro jsStr>
  <#local captured><#nested></#local>
  "${captured?js_string}"<#t>
</#macro>

...

var dropdown = <@jsStr><@util.createDropdown field=xmlNode/></@>;