underscore.js模板中的变量

时间:2012-06-23 15:23:21

标签: javascript underscore.js template-engine

如何在使用underscore.js构建的应用的backbone.js模板中设置变量?我只想创建可重用的已处理字符串。此外,可以使用underscore.js这样的内置函数_.escape来处理这些变量吗?

<script type="text/html" id="templateresults">

<p><%= encodeURIComponent(title) %></p> // this works

// try 1:
var encodedTitle = encodeURIComponent(title); // shows up as regular text
<p>'+encodedTitle+'</p> // this doesn't work and shows up as regular text

// try 2:
<% var encodedTitle = encodeURIComponent(title); %> // nothing shows up
<p><% '+encodedTitle+' %></p> // nothing shows up

</script>

title是一个JSON项(文本字符串)。

编码输出:This%20is%20a%20Sample%20Title
常规输出:This is a Sample Title

1 个答案:

答案 0 :(得分:20)

您的尝试2几乎是正确的,但输出encodedTitle的标记在开始时缺少=,并且不需要字符串中的+。应该是:

<p><%= encodedTitle %></p>

或者您也可以这样做:

<p><% print(encodedTitle) %></p>

在下划线模板中,您想要评估的任何javascript都必须包含在<% %>中,因此您的第二次尝试只是将javascript作为字符串输出。您在顶部正确使用了样本中的=,但在第2步中省略了它。

=告诉模板引擎将包含的javascript的结果作为字符串输出。如果您不使用=,则会执行javascript,但不输出任何内容。 Underscore的模板提供print()函数作为使用=的替代方法,我不知道一种方法比另一种更好。