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

时间:2015-02-01 09:48:12

标签: ruby-on-rails ruby-on-rails-4 handlebars.js

我们在rails 4 app中使用了把手。 困扰我们的问题是我们需要在我们的系统中使用每个单独的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模板中的替代方法,因为我不希望我们的前端开发人员编写“服务器端代码”。

是否存在任何解决方案?

2 个答案:

答案 0 :(得分:2)

你可以尝试在Ruby(handlebars.register_helper)和JS(Handlebars.registerHelper)中注入一个帮助器,它获取一个字符串并预先设置资产根路径。

类似于<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
  • 或者,创建一个字典,其中所有文件名都作为键,最终URL作为值 - 循环遍历Rails.root.join("app/assets/**/*.*"),每个路径的值为view_context.asset_path(path),并在JS助手中使用此字典
  • 或者,预编译.hbs并将资产路径替换为最终路径(使用.hbs.erb或仅使用rake任务)。

没有什么是完美的,但上述之一将为您提供所需的一切。

答案 1 :(得分:1)

加入.scss文件

在你的模板中:

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

在.scss文件中:

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