在javascript中嵌入erb代码以用于资产管道

时间:2012-01-23 00:27:21

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

在我的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") >">';

我看不到导轨指南中的任何额外步骤 - 是否有我遗漏的东西?顺便说一下,我正在使用haml作为视图文件,并且还使用.js.haml进行了上述操作,并将其封装在#{...}中。

3 个答案:

答案 0 :(得分:10)

您的代码中存在语法错误。这样:

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

应该是这样的:

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

您错过了帮助程序代码块的结束erb标记。

答案 1 :(得分:0)

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

使用gon

应用程序/视图/布局/ application.html.erb:

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

应用程序/控制器/ application_controller.rb:

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

应用程序/资产/ Javascript角/ shared.js.coffee:

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

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

URL of images in JavaScript code using Rails 3.1 asset pipeline?

询问了将资产URL传递给Javascript的特定用例

答案 2 :(得分:-2)

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

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