在Underscore.js中使用<%进行模板化而不进行解析

时间:2013-01-29 07:24:06

标签: templates underscore.js

通常,如果您使用Underscore.js进行模板化,则任何看起来像<% ... %><%= ... %>的表达式都会被Underscore.js解析

如果我想在文档中嵌入文本<% ... %>,我该如何转义这样的值?

换句话说:我如何告诉Underscore.js忽略看似占位符的东西,但这不是占位符?

我想我必须使用某种转义,但通常的\将不起作用。如果我输入

_.template('<%= name %> ### \<%= name %>', { name: 'foo' });

我得到了foo ### foo,显然不是我想要的。

更新:为了更清楚,我想从上面的行 - 它应该导致

foo ### <%= name %>

2 个答案:

答案 0 :(得分:3)

如果您的最终输出是HTML,则可以将<>替换为其HTML转义码代码:

_.template('<%= name %> ### &lt;%= name %&gt;', { name: 'foo' });

你也可以modify Underscore's template settings支持这些事情,以便<%= ... %>对下划线没有任何意义:

_.templateSettings = {
    interpolate: /\{\{(.+?)\}\}/g
};
var t = _.template('{{name}} ### <%= name %>', { name: 'foo' });

答案 1 :(得分:0)

对于非HTML特定解决方案,请使用unicode character escape sequences来转义<>%。以您的示例为例:

_.template('<%= name %> ### \u003C\u0025= name \u0025\u003E', { name: 'foo' });

将输出

foo ### <%= name %>