【问题标题】:Embedding erb code in javascript for asset pipeline在资产管道的 javascript 中嵌入 erb 代码
【发布时间】:2012-01-23 00:27:20
【问题描述】:

在我的 rails 3.1.3 应用程序中,我想在我的 javascript 文件中插入一些 ERB 代码,但由于某种原因它没有被解析:

# app/assets/javascripts/application.js
//= require_tree ./shared

# app/assets/javascripts/shared/shared.js.erb
MM.loading = '<img src="<%= asset_path("icons/ajax-loader.gif") >">';

/application.js 中这样渲染:

MM.loading = '<img src=" asset_path("icons/ajax-loader.gif") >">';

我在 Rails 指南中看不到任何额外的步骤 - 有什么我遗漏的吗?顺便说一句,我对视图文件使用了haml,并且还使用.js.haml 尝试了上述操作,并包含在#{...} 中。

【问题讨论】:

    标签: javascript ruby-on-rails-3.1 erb asset-pipeline


    【解决方案1】:

    您的代码中有语法错误。这个:

    MM.loading = '<img src="<%= asset_path("icons/ajax-loader.gif") >">';
    

    应该是这样的:

    MM.loading = '<img src="<%= asset_path("icons/ajax-loader.gif") %>">';
    

    您缺少帮助程序代码块的结束 erb 标记。

    【讨论】:

    • 啊,很好看……就是这样!
    【解决方案2】:

    在 Rails 4 中,我建议您尽可能坚持使用资产管道,而不是使用 js.erb 视图,并使用 gon 或在 Ruby on Rails - Send JavaScript variable from controller to external Javascript asset file 讨论的其他技术将变量传递给 Js

    gon:

    app/views/layouts/application.html.erb:

    <head>
      <meta charset="utf-8"/>
      <%= include_gon %>
    

    app/controllers/application_controller.rb:

    before_filter { gon.path = asset_path('icons/ajax-loader.gif') }
    

    app/assets/javascripts/shared.js.coffee:

    MM.loading = '<img src="' + gon.path + '">';
    

    这种方法更快,因为文件仅在启动时预编译一次,由服务器而不是通过 Rails 提供服务,并且与其余 Js 使用相同的 HTTP 请求。

    将资产 URL 传递给 Javascript 的特定用例已在以下位置询问:URL of images in JavaScript code using Rails 3.1 asset pipeline?

    【讨论】:

      【解决方案3】:

      为您的 application.js 添加一个 .erb 扩展名,它应该可以工作。

      首先包含所需文件的内容,然后根据清单上的扩展名进行处理。

      【讨论】:

      • 好主意,但对我不起作用。在将.erb 附加到清单文件名之后,在shared.js.erb 中尝试了console.log("1 + 1 = &lt;%= puts 1+1 %&gt;");
      • 这不是必需的。修复括号后,它无需在清单文件名上附加 .erb 即可工作。
      猜你喜欢
      • 1970-01-01
      • 2011-11-14
      • 2013-12-02
      • 2013-07-17
      • 1970-01-01
      • 1970-01-01
      • 2013-11-19
      • 2013-07-16
      相关资源
      最近更新 更多