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

Embedding erb code in javascript for asset pipeline

本文关键字:用于 管道 代码 erb javascript      更新时间:2023-09-26

在我的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中尝试了上述方法,包含在#{...}中。

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

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

应该是这样的:

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

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

在Rails 4中,我建议您尽可能坚持使用资产管道,并使用gon或其他技术将变量传递给Js,而不是使用js.erb视图:Ruby on Rails-将JavaScript变量从控制器发送到外部JavaScript资产文件

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的特定用例已在以下位置进行了询问:使用Rails3.1资产管道的Javascript代码中图像的URL?

将.erb扩展添加到您的application.js中,它应该可以工作了。

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