如何在 freemarker 模板中附加字符串

How to append String in freemarker template

我遇到了必须将字符串附加到 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 ) 

});  

另外,如果有更好的方法来完成这个任务,请提出建议。

像往常一样生成输出,将其捕获到一个变量中(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/XHTML output format(或任何其他标记输出格式)时才需要。如果你不使用任何,它会失败说左边的操作数是一个字符串,所以你会知道。

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

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

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

但我猜它不太实用(如果你追加很多次,速度会变慢)。