带有骨架轨道的导轨:EJS文件中的资产助手(Image_path)
-
25-10-2019 - |
题
我有一个使用Rails 3.1应用程序 代码架/骨干轨. 。在.jst.ejs模板中,我想包括一个图像,例如:
<img src="<%= image_path("foo.png") %>"/>
但是,当然,JavaScript中的资产助手不可用。
Chaining Erb(.jst.ejs.erb)不起作用,因为EJS语法与ERB发生冲突。
这是我所知道的:
- 资产助手在浏览器中不可用,因此我需要在服务器端运行它们。
- 我可以通过使服务器将各种资产路径转移到HTML(通过数据属性或
<script>
和json)并在JS中读回它们,但这似乎很笨拙。
有没有办法以某种方式使用EJS文件中的资产助手?
解决方案
实际上,有一种方法可以链条a .jst.ejs.s.erb文件,尽管它是相当无证件的,而且我只通过查看EJS测试案例而找到了它。您可以告诉EJS使用{{}}(或[%%]或其他想要的其他)而不是<%>>,然后ERB不会尝试评估您的EJS呼叫。
确保在您的代码某个地方需要EJS(我只是包括在内 gem 'ejs'
在我的gemfile中),然后创建一个初始化器(我称其为ejs.rb),其中包括以下内容:
EJS.evaluation_pattern = /\{\{([\s\S]+?)\}\}/
EJS.interpolation_pattern = /\{\{=([\s\S]+?)\}\}/
然后,只需确保将模板重命名为.jst.ejs.s.erb,然后用{{}}替换您现有的<%> ejs解释代码即可。如果要使用{{}}以外的其他东西,请更改初始化器中的正则表达式。
我希望链接中有一个选择可以通过配置来处理此问题,而不是必须明确包含EJ,但是到目前为止,我无法做到这一点。
其他提示
我可以看到两种方式。都不是很棒。
当你说 <%%= variable %>
然后,这是ERB渲染的 <%= variable %>
, ,所以您可以将百分之一倍逃脱 但 Asset_tags,这将在前往EJS的途中通过一个ERB通过。
如果您发现太粗暴了...
如何使用ERB扩展名来制作不同的JavaScript文件,以定义您的资产路径?然后使用资产管道要求。
所以说 assets.js.erb
定义类似:
MyAssets = {
'foo': <%= image_path("foo.png") %>,
...
}
然后需要在您清单顶部附近的某个地方。然后引用在EJS中起作用的全球。
对于愿意尝试HAML而不是EJS的人:使用 haml-coffee 通过 haml_coffee_assets 对我来说也很好。
您可以在.hamlc.erb文件中使用以下内容:
%img(src="<%= image_path('foo.png') %>")
(但是,它仍然没有为您提供路由助手,只有资产帮助者。)
瑞安·菲茨杰拉德(Ryan Fitzgerald)很友善地发布了他的JavaScript资产助手的要点(与ERB预先编译): https://gist.github.com/1406349
您可以通过以下宝石使用相应的JavaScript助手:https://github.com/kavkaz/js_assets
最后(安装和配置后)您将能够这样使用:
<img src="<%= asset_path("foo.png") %>"/>