如何在freemarker模板中追加String

时间:2017-08-19 13:14:50

标签: javascript freemarker

我的情况是我必须将String附加到freemarker模板中的变量。

例如:

我有对象列表,每个都返回特定值,以便我可以将这些值存储在freemarker声明对象中,并在模板中稍后将其传递给javascript函数。

这里有一些代码片段:

// This is the list of items
[#list itemsList as item]

//here I am getting the object that I wanted to add in the template object
[#object = item.getObject()!]

//This is how I would like to append the object
[# itemsToAppendTo = "<div class="subs" id="til2"" + ${object} + "</div>"

[/#list]

//finally once loop finishes I would like to send the object to javascript

<script>

 // A $( document ).ready() block.
$( document ).ready(function() {

  var html = ${itemsToAppendTo}

  $('.gTA').append( html ) 

});  

此外,如果有更好的方法可以完成此任务,请提供建议。

1 个答案:

答案 0 :(得分:2)

只需像往常一样生成输出,将其捕获到变量(html)中,然后将其打印到JavaScript部分。

<#assign html>
  <#list items as item>
    <div ...>${item.object}</div>
  </#list>
</#assign>
...
<#-- Attention: Remove ?markup_string if you aren't using any output format! -->
var html = "${html?markup_string?js_string}";
只有在使用?markup_string / HTML / XML output format(或任何其他标记输出格式)时,才需要

XHTML。如果你没有使用any,那么左手操作数就是一个字符串就会失败,所以你就会知道。

?js_string可确保使用反斜杠转义引号等。

请注意,您还可以附加到这样的字符串:

<#assign s = 'foo'>
<#assign s += 'bar'>
${s} <#-- foobar -->

但我认为它不太实用(如果多次追加则会慢一些。)