在javascript中嵌入erb代码用于资产管道
Embedding erb code in javascript for 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
中尝试了上述方法,包含在#{...}
中。
您的代码中存在语法错误。此:
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中,它应该可以工作了。
首先包含所需文件的内容,然后根据清单上的扩展名进行处理。
相关文章:
- 将函数的上下文应用于javascript变量
- keyup事件处理程序更改焦点不适用于快速键入
- JQueryhide()不适用于Mozzilla,但适用于Chrome
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- PHP中的setcookie仅适用于localhost
- 如何检查管道中未定义的项目
- 包括用于facebook评论框的JavaScript SDK
- 如何检测用于WebGL的专用或集成显卡
- ng更改事件不适用于Dropdown
- 用于搜索的聚合物嵌套绑定
- jQuery表单添加不适用于下拉列表
- Rails/JSON:如何将JSON用于jquery UI自动完成表单
- JS编译器/包管理器,用于版本控制
- 将CSS应用于printWindow.print();在Javascript中
- 用于'魔术串'属性
- 用于检查数组中是否存在元素的javascript自定义方法
- 谷歌地图API v3不适用于移动浏览器或PhoneGap
- 异步库是否有任何用于处理管道的控制流
- 在javascript中嵌入erb代码用于资产管道
- Rails 3.1用于Javascript的资产管道