我们在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模板中的替代方法,因为我不希望我们的前端开发人员编写“服务器端代码”。
是否存在任何解决方案?
答案 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中进行摘要时,只需预先设置资产路径即可获得帮助。
您的选择:
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;
}