使用 Rails 3.1 资产管道的 JavaScript 代码中的图像 URL?
在 CSS 文件中,您可以使用以下方法获取图像资源的正确名称(带有指纹):
background-image: url(image-url("rails.png"))
但是如何从 JavaScript 文件中执行相同操作?
In CSS files, you can get the proper name of an image asset (with the fingerprint) by using:
background-image: url(image-url("rails.png"))
but how do you do the same from a JavaScript file?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我看到你正在使用 sass 辅助方法。
在标准(非 Sass)CSS 中,您可以执行以下操作:
.class { background-image: url(<%= asset_path 'image.png' %>) }
CSS 文件需要将 erb 添加到扩展名中:
file_name.css.erb
对于 javascript,适用相同的规则:
file_name.js.erb
并在文件中:
var image_path = '<%= asset_path 'image.png' %>'
Rails 资产管道指南是一个关于如何使用这些功能的优秀信息来源。
I see you are using the sass helper method.
In standard (non Sass) CSS you do something like this:
.class { background-image: url(<%= asset_path 'image.png' %>) }
The CSS file will need to have erb added to the extensions:
file_name.css.erb
For javascript the same rules apply:
file_name.js.erb
and in the file:
var image_path = '<%= asset_path 'image.png' %>'
The Rails asset pipeline guide is an excellent source of information about how to use these features.
在 Rails 4 中,我建议您不要使用
js.erb
视图,而是坚持使用资产管道,并使用变量将 URL 传递给它,而不是使用 gon 或在以下位置讨论的其他技术:Ruby on Rails - 将 JavaScript 变量从控制器发送到外部 Javascript资产file与 gon:
app/views/layouts/application.html.erb:
app/controllers/application_controller.rb:
app/assets/javascripts/file.js.coffee:
这个方法是速度更快,因为文件仅在启动时预编译一次,由服务器而不是通过 Rails 提供服务,并且与 J 的其余部分在相同的 HTTP 请求上。
In Rails 4, instead of using a
js.erb
view I recommend that you stick to the asset pipeline, and pass the URL to it with a variable instead using gon or some other technique discussed at: Ruby on Rails - Send JavaScript variable from controller to external Javascript asset fileWith
gon
:app/views/layouts/application.html.erb:
app/controllers/application_controller.rb:
app/assets/javascripts/file.js.coffee:
This method is faster because file is precompiled only once at startup, gets served by the server instead of through Rails, and on the same HTTP request as the rest of the Js.