我们正在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模板中,因为我不希望前端开发人员编写“服务器端代码”。
有解决方案吗?
最佳答案
您可以尝试在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
或者,创建一个字典,将所有文件名作为键,并将最终URL作为值-遍历Rails.root.join("app/assets/**/*.*")
,对于每个路径,您的值均为view_context.asset_path(path)
,然后在JS帮助器中使用此字典
或者,预编译.hbs
并将资产路径替换为最终路径(通过使用.hbs.erb
或仅通过rake任务)。
没有什么是完美的,但是以上之一可以满足您的需求。