通过构建所有asset_path值来避免使用*.js.erb文件

Jus*_*rls 17 ruby-on-rails erb sprockets asset-pipeline

因此,我希望避免使用ERB处理JavaScript文件,这样我就可以获得适当的资产路径,例如图像.

目前,这似乎是流行的方法:

var myImage = "<%= asset_path('my_image') %>";

当然,这需要将文件名更改为"*.erb",以便进行处理.

我更倾向于将ERB丑陋与我项目中的一个点隔离,制作一个清单文件(例如"assets.js.erb")来计算并提供我需要的所有资产路径.

我当然可以通过逐案解决来做到这一点:

ASSETS =
  "my_image": "<%= asset_path('my_image') %>"

window.assetPath = (path) -> ASSETS[path]
Run Code Online (Sandbox Code Playgroud)

但是,我真的宁愿只写一些ERB来递归我的所有内容asset_paths.asset_environment.paths并为我构建一个大的对象文字清单,这样我真正的应用程序JavaScript就可以自信地调用:

var myImage = assetPath('my_image');

关于(1)的任何想法是否有更容易的方法来做我错过的,或者(2)我如何完成对所有潜在有效参数的搜索asset_path

Tho*_*ory 6

更简单的方法:

  1. 获取.js.erb中的资产前缀:<%= Rails.configuration.assets.prefix%>.如果需要一个绝对路径,你也可以获得应用程序URL(从rails获取它更复杂,所以你可以在你的.js.erb中对它进行硬编码?)

  2. 如果您正在使用预编译资产,请获取存储在manifest.yml中的文件指纹(位于<%= Rails.configuration.assets.manifest%>).清单包含一个列表,其中包含您的所有资产及其各自的指纹(文档)

  3. 使assetPath只是将应用程序URL +前缀添加到您的图像名称或指纹

不方便的是,您必须指定完整的图像名称(包括扩展名).