我有一个使用codebrew/backbone-rails的Rails 3.1应用。在.jst.ejs模板中,我想包含一个图像,如下所示:
<img src="<%= image_path("foo.png") %>"/>
但当然,JavaScript中没有资产助手。
链接ERB(.jst.ejs.erb)不起作用,因为EJS语法与ERB冲突。
以下是我所知道的:
<script>
和JSON)并在JS中读取它们,但这看起来很笨拙。有没有办法以某种方式在EJS文件中使用资产助手?
答案 0 :(得分:25)
实际上,有一种方法可以链接一个.jst.ejs.erb文件,虽然它没有文档记录,我只是通过查看EJS测试用例找到它。您可以告诉EJS使用{{}}(或[%%]或您想要的任何其他内容)而不是&lt; %%&gt;,然后ERB将不会尝试评估您的EJS呼叫。
确保在代码中的某处需要EJS(我只是在我的Gemfile中包含gem 'ejs'
),然后创建一个包含以下内容的初始化程序(我称之为ejs.rb):
EJS.evaluation_pattern = /\{\{([\s\S]+?)\}\}/
EJS.interpolation_pattern = /\{\{=([\s\S]+?)\}\}/
然后确保将模板重命名为.jst.ejs.erb,并替换现有的&lt; %%&gt;使用{{}}的EJS解释代码。如果您想使用{{}}以外的其他内容,请更改初始值设定项中的正则表达式。
我希望Sprockets中有一个选项可以通过配置来处理这个问题,而不是明确地包含EJS,但是到目前为止,我无法做到这一点。
答案 1 :(得分:16)
我可以看到两种方式。两者都不是很好。
当您说<%%= variable %>
时,ERB会将其作为<%= variable %>
呈现,因此您可以将所有但是资产标签的百分之一转出,并且可以在通过一个ERB的行程中幸存下来传递给EJS。
如果你发现太严重......
如何使用ERB扩展名制作定义资产路径的其他javascript文件?然后使用资产管道来要求。
所以说assets.js.erb
定义如下:
MyAssets = {
'foo': <%= image_path("foo.png") %>,
...
}
然后在靠近清单顶部的地方要求它。然后引用全局变量然而在EJS中起作用。
答案 2 :(得分:5)
对于那些愿意尝试使用HAML而不是EJS的人:使用haml-coffee到haml_coffee_assets对我来说也很有效。
您可以在.hamlc.erb文件中包含以下内容:
%img(src="<%= image_path('foo.png') %>")
(但它仍然不会给你路由助手,只有资产助手。)
答案 3 :(得分:4)
Ryan Fitzgerald非常友好地发布了他的JavaScript资产助手的要点(通过ERB预编译):https://gist.github.com/1406349
答案 4 :(得分:2)
您可以通过以下gem使用相应的Javascript助手: https://github.com/kavkaz/js_assets
最后(在安装和配置之后),您将能够像这样使用它:
<img src="<%= asset_path("foo.png") %>"/>