在erb模板中嵌入ejs模板

5
我正在构建一个重度使用javascript的rails 3应用程序。它使用underscore.js,该库内置了一种非常优雅的模板机制,建立在ejs之上(http://embeddedjs.com/)。
问题是:embeddedjs从erb语法中大量借鉴,因此在erb模板中包含ejs模板会导致视图渲染问题。
有没有办法在erb文件中包含“非erb”部分?这将让我在erb文件中定义ejs模板。目前,我正在使用一个技巧,在其中编写一个帮助程序,读取包含ejs模板的文件的原始内容,并将其作为原始字符串输出到erb模板中。

1
在 Haml 中,使用 :plain 过滤器很容易实现。http://haml-lang.com/docs/yardoc/file.HAML_REFERENCE.html#plain-filter - Heikki
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模板采用同样的技巧。


这正是我想要的,但我不确定如何将其与Rails结合起来。(我没有使用underscore,只有EJS和JST。) - carpeliam
刚刚找到了解决问题的方法 - 在初始化器中将EJS.evaluation_pattern分配为/{{([\s\S]+?)}}/,将EJS.interpolation_pattern分配为/{{=([\s\S]+?)}}/。 - carpeliam

2

转义下划线变量:(那些您不想让erb插值的变量)

<%= foo %> becomes:

<%%= foo %>

2
你可以将ejs保存为一个单独的文件,然后作为文本进行渲染(不会被视为erb),并放置在script标签内。
在你的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)

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