我需要在 Rails 资产管道中的 HTML5 画布上显示图像,但我需要知道来自 JavaScript 的资产路径。我正在将js-routes用于应用程序的其他部分,但它似乎没有提供一种方法来获取资产管道中某些内容的路径。
从 JavaScript 获取 Rails 资产(例如图像)路径的正确方法是什么?
我需要在 Rails 资产管道中的 HTML5 画布上显示图像,但我需要知道来自 JavaScript 的资产路径。我正在将js-routes用于应用程序的其他部分,但它似乎没有提供一种方法来获取资产管道中某些内容的路径。
从 JavaScript 获取 Rails 资产(例如图像)路径的正确方法是什么?
在 Rails资产管道指南中,他们通过使用 ERB 预处理样式表,提供了在样式表中编码资产的示例。您可以在 JavaScript 中使用相同的技术,假设您.erb
在文件名的末尾添加了一个:
var someAssetPath = "<%= asset_path('some_image.png') %>";
查看js_assets(rails 项目中的 Javascript 助手) gem。我认为这正是您所需要的。
从文档中:
在 javascript 中获取模板 app/assets/javascripts/rubrics/views/index.html 的路径:
var path = asset_path('rubrics/views/index.html')
为什么不在 .erb 文件中的元素内为路径添加数据属性,然后使用 JQuery 检索它?
在 some_template.html.erb 里面
<%= content_tag(:div, "", id: 'some-id', data:{path_to_asset: asset_path("some_image.png")}) %>
然后在 some_javascript.js
var assetPath = $("#some-id").data("pathToAsset");
对于使用 HAML 的用户,您可以执行以下操作:
:javascript
var assetPath = "#{asset_path('some_image.jpg')}";
我在 Rails 4.1 中遇到了同样的问题,并在咖啡脚本中使用了引用 rails 资产来获取图像。不需要额外的库。
在我的例子中,我想获得样式表路径和 rails 为缓存破坏生成的哈希值,这使得硬编码变得不可能。
最终对我来说效果很好的是为html(布局)中的主要样式表链接元素分配一个ID,然后使用javascript提取href。如果您想要基本资产路径,也许可以创建一个通用元素,其中包含您需要的数据作为属性。
呈现的 HTML
<link rel="stylesheet" href="mypath/main.css" type="text/css" id="main-css">
JS
$("#main-css").attr("href"); // "mypath/main.css"