我们正在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任务)。


没有什么是完美的,但是以上之一可以满足您的需求。

10-06 04:20