Rails 中的车把 + 图片 4 - 如何获得正确的 asset_path?

Handlebars + Images in Rails 4 - How do I get the right asset_path?

我们在 rails 4 应用程序中使用车把。 困扰我们的问题是,我们需要让我们系统中使用图像的每个 hbs 文件都使用 .erb 扩展名,这样当图像在生产中预编译时,我们将拥有正确的资产路径....

因此,我需要转换这种类型的代码,而不是将客户端代码与服务器代码完全分离:

sideBarTemplate.hbs:

<img src="assets/main/logo.png" alt="image description" width="126" height="34">

进入这种类型的代码:

sideBarTemplate.hbs.erb:

<img src="<%=asset_path('main/logo.png')%>" alt="image description" width="126" height="34">

我们的目标当然是找到一种替代方法来将服务器代码渲染到我们的 hbs 模板中,因为我不希望我们的前端开发人员编写 "server side code"。

有解决办法吗?

放入.scss文件

在您的模板中:

<div id='logo'></div>

在您的 .scss 文件中:

 #logo{
    background: image-url ('main/logo.png');
    width: 126px;
    height: 34px;
  }

您可以尝试在 Ruby (handlebars.register_helper) 和 JS (Handlebars.registerHelper) 中注入一个 helper,它获取一个字符串并在资源根路径前添加。

类似于<img src="{{assetPath 'main/logo.png'}}"

在 JS 方面,一次从 Ruby 获取资源路径的时间(例如使用 .js.erb)并在助手中使用该变量。

更新:

关于如何使用助手的示例:

http://jaskokoyn.com/2013/08/08/custom-helpers-handlebars-js-tutorial/ https://github.com/cowboyd/handlebars.rb#block-helpers

注意事项

由于 asset_path 输出一个可以有摘要的路径,这让事情变得有点复杂。当您在 URL.

中有摘要时,仅在资产路径前添加无济于事

您的选择:

  • 使用 https://github.com/alexspeller/non-stupid-digest-assets 也将允许访问非摘要 URLs
  • 或者,创建一个字典,其中所有文件名作为键,最终 URL 作为值 - 遍历 Rails.root.join("app/assets/**/*.*") 并且对于每个路径,您的值为 view_context.asset_path(path) 并使用此字典在 JS 助手中
  • 或者,预编译 .hbs 并将资产路径替换为最终路径(通过使用 .hbs.erb 或仅使用 rake 任务)。

没有什么是完美的,但以上任何一种都能满足您的需求。