【问题标题】:Embedding an ejs template inside of an erb template在 erb 模板中嵌入 ejs 模板
【发布时间】:2011-01-17 18:35:32
【问题描述】:

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

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

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

【问题讨论】:

标签: ruby-on-rails erb ejs


【解决方案1】:

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

// 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 联系起来。 (我没有使用下划线,只使用 EJS 和 JST。)
  • 刚刚找到了我的问题的解决方案 - 将 EJS.evaluation_pattern 分配给 /\{\{([\s\S]+?)\}\}/ 并将 EJS.interpolation_pattern 分配给 /\{\ {=([\s\S]+?)\}\}/ 在初始化程序中。
【解决方案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)

【讨论】:

    【解决方案3】:

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

    <%= foo %> becomes:
    
    <%%= foo %>
    

    【讨论】:

      猜你喜欢
      • 2014-01-24
      • 1970-01-01
      • 2012-06-03
      • 2023-03-06
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多