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 任务)。
没有什么是完美的,但以上任何一种都能满足您的需求。
我们在 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 任务)。
没有什么是完美的,但以上任何一种都能满足您的需求。