javascript - 图片资源可用于 CSS 文件而不是 JS 文件——为什么?

标签 javascript css ruby-on-rails

我试图通过 js 文件访问 Assets 管道中的图像,但是我收到 404 错误,指出该图像不存在。我的理解是 Rails 指纹和预编译/预加载图像/ Assets 到浏览器,因此文件路径“imageName.png”变成了“imageName-uniqueFingerprint.png”的效果,从而使原始路径不再有效。 (有误请指正)

我不明白的是为什么我可以在 CSS 文件中使用原始路径,例如:background: url('nebula_small.png') 并且可以很好地检索图像,但是如果我尝试在 JS 文件中使用相同的路径,我会得到 404。我认为 Assets 目录中的所有内容都是由 Rails 预编译的,因此我假设对各个 Assets 具有相同的访问权限。

我可以编写一个辅助方法(根据 this StackOverflow suggestion) 将 digest_path 与原始路径相关联,但是我想知道是否有某种方法可以简单地为 JS 文件提供与 CSS 文件具有的图像相同的访问权限。

对于 Rails 还是新手,所以如果您需要说明或者我措辞不当,我深表歉意。感谢您的宝贵时间。

最佳答案

我想最简单的方法是将 .erb 扩展名添加到您的 .js 文件,并使用 asset_path rails helper:

$('#logo').attr({ src: "<%= asset_path('logo.png') %>" });

第二种方法有点复杂,是解析您的 .sprockets-manifest-md5hash.json 文件,该文件被编译到您的公共(public)文件夹中,其中包含所有 url到你的图像。您可以在这里阅读更多相关信息:

http://edgeguides.rubyonrails.org/asset_pipeline.html#precompiling-assets

https://github.com/rails/sprockets/blob/master/UPGRADING.md#publicassetsmanifest-abc123json-location

关于javascript - 图片资源可用于 CSS 文件而不是 JS 文件——为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33676312/

相关文章:

javascript - 如何让基础中的狂欢模式正常工作?

javascript - 单击特定元素时暂停 HTML 音频

html - Div 没有向左浮动

JavaScript:加载空 iframe 时获取通知

javascript - 如何获取 JSON 字符串中的数据

html - 为什么 A HREF 标签中的 IMG 标签没有对齐的边框

css - 填充拉伸(stretch)一个 div

mysql - 我的rails应用程序使用mysql数据库和AR-ORM,但我想要印象派单一使用MongoDB

ios - 使用 iOS 将图像上传到在线存储的最佳(或最佳)做法是什么?

ruby-on-rails - Active Record in_batches 与 find_in_batches