在我的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
进行了上述操作,并将其封装在#{...}
中。
答案 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扩展名,它应该可以正常工作。
首先包含所需文件的内容,然后根据清单上的扩展名进行处理。