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

在javascript中嵌入erb代码用于资产管道,javascript,ruby-on-rails-3.1,erb,asset-pipeline,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") >

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

我在导轨上看不到任何额外的步骤-我有什么遗漏吗?顺便说一句,我在视图文件中使用了haml,并尝试了上面的
.js.haml
,在
{…}
中添加一个.erb扩展名到你的application.js,它应该可以工作


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

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

MM.loading = '<img src="<%= asset_path("icons/ajax-loader.gif") >">';
MM.loading='“>”;
应该是这样的:

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

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

在Rails 4中,不要使用
js.erb
视图,我建议您尽可能坚持使用资产管道,并使用gon或下面讨论的其他技术将变量传递给js:

使用
gon

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

<head>
  <meta charset="utf-8"/>
  <%= include_gon %>
app/assets/javascripts/shared.js.coffee:

MM.loading = '<img src="' + gon.path + '">';
MM.load='';
这种方法更快,因为文件在启动时只预编译一次,由服务器提供服务,而不是通过Rails,并且与Js的其余部分使用相同的HTTP请求


将资产URL传递给Javascript的特定用例已在以下位置被询问:

好主意,但对我不起作用。尝试
console.log(“1+1=”).erb
附加到清单文件名后,在
shared.js.erb
中添加code>。这不是必需的。在修复了括号之后,它没有在清单文件名上附加.erb就可以工作了。啊,很好地发现了。。。就这些!
before_filter { gon.path = asset_path('icons/ajax-loader.gif') }
MM.loading = '<img src="' + gon.path + '">';