5

我正在构建一个 javascript-heavy rails 3 应用程序。它使用 underscore.js,它有一个非常优雅的模板机制,建立在 ejs ( http://embeddedjs.com/ ) 之上。

问题:embeddedjs 大量借鉴了 erb 语法,因此在 erb 模板中包含 ejs 模板会导致视图呈现问题。

有没有办法在 erb 文件中包含“非 erb”部分?这将让我在 erb 文件中定义 ejs 模板。现在我正在使用一个 hack,我有一个助手,它读取包含 ejs 模板的文件的原始内容,并将其作为原始字符串输出到 erb 模板中。

4

3 回答 3

3

我使用这个技巧来解决问题:

// Using custom tags to be able to use regular for templates in templates
var ejs = require('ejs');
ejs.open = '{{';
ejs.close = '}}';

// Using html extension for custom ejs tags
app.register('.html', ejs);

app.set('views', __dirname + '/views');
app.set('view engine', 'html');

这会将 <% %> 更改为 {{ }},让我将 <% %> 用于 JS 使用的模板。这对我有用,因为我没有经典样式模板 (<% %>)。

如果你有很多这些,你可能想要做同样的技巧,但对于 underscore.js 模板。

于 2011-04-11T13:01:22.820 回答
2

您可以将 ejs 保存为单独的文件,然后将其呈现为脚本标记内的文本(不会被评估为 erb)。

在您的 erb 部分内部:

<script id="my_awesome_template" type="text/x-ejs">
  <%= render :text => File.open("app/views/controller_name/_my_awesome_template.html.ejs").read %>
</script>`

在您的 JavaScript 文件中:

new EJS({element: document.getElementById('my_awesome_template')}).render(data)
于 2012-02-01T17:18:35.153 回答
2

转义您的下划线变量:(您不希望 erb 插值的变量)

<%= foo %> becomes:

<%%= foo %>
于 2015-02-05T19:55:20.913 回答