在erb模板中嵌入ejs模板

时间:2011-01-17 18:35:32

标签: ruby-on-rails erb ejs

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

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

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

3 个答案:

答案 0 :(得分: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模板。

答案 1 :(得分:2)

您可以将ejs保存为单独的文件,而不是将其作为文本(不会被评估为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)

答案 2 :(得分:2)

转义下划线变量:(你不想插入的那些变量)

<%= foo %> becomes:

<%%= foo %>