如何将Underscore.js模板与EJS一起使用?

9
他们都使用相同的语法来插入变量。例如,如果我想要以下内容:
<%= username %>

在我的Underscore中,我的主要EJS出现了问题,因为它试图替换用户名,但是在主页面中不存在这样的变量。

为什么你需要两个(东西)?方括号是否像这里提到的那样有效?http://code.google.com/p/embeddedjavascript/wiki/Testing - Marc
1
我正在使用EJS和Backbone.js。 - deltanovember
你的方括号是否正常工作? - Marc
不,我不仅需要一个自定义标签,还需要让 EJS 忽略 <% %>。 - deltanovember
请查看我回答的新部分。 - Marc
3个回答

9

我遇到了这个问题,想和大家分享一下我在客户端解决问题的方法。以下是如何更改转义正则表达式(通过underscore.js 文档):

_.templateSettings = {
    interpolate : /\{\{(.+?)\}\}/g
};
var template = _.template( "{{example_value}}");

将 <%= %> 更改为 {{ }}。


8
我认为在EJS中默认情况下可以使用方括号:
[%= username %]

如果您需要更高级的功能,EJS的Github页面描述了如何创建自定义标签:

var ejs = require('ejs');
ejs.open = '{{';
ejs.close = '}}';
  • 我认为第二个“更高级”的部分可能是针对服务器端应用程序的

https://github.com/visionmedia/ejs

使用客户端GitHub示例时,您需要在渲染时执行以下语法:

var html = require('ejs').render(users, { open: "^%", close: "%^" });

选项是render()的第二个参数。


1
我在后端(express)使用ejs模板渲染网页时遇到了同样的问题,同时我需要在前端使用underscore模板。 我尝试了Marc的答案,但没有帮助,我认为它已经过时了,不能在新版本中使用。 在较新的ejs版本(我的版本是2.3.3)中,您不能再使用ejs.openejs.close,而是使用ejs.delimiter。 我将ejs的定界符更改为'$',因此ejs仅处理<$ $>标记以插入变量,并将<% %>标记视为无意义的语法。
app.set('view engine', 'ejs');
var ejs = require('ejs');
ejs.delimiter = '$';
app.engine('ejs', ejs.renderFile);

注意:我将上面的代码添加到 express 应用程序中的 app.js 文件中,它可以正常工作。如果您想在前端使用它,只需将 {'delimiter': '$'} 作为选项参数传递给 ejs.render(str, options)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接