我有一个使用
codebrew/backbone-rails的Rails 3.1应用程序.在.jst.ejs模板中,我想包括一个图像,像这样:
<img src="<%= image_path("foo.png") %>"/>
但是,资源帮助者当然不可用JavaScript.
链接ERB(.jst.ejs.erb)不起作用,因为EJS语法与ERB冲突.
这是我所知道的:
>资产助手在浏览器中不可用,所以我需要在服务器端运行它们.
>我可以通过使服务器将各种资源路径转换成HTML(通过数据属性或< script>和JSON)并在JS中读取它们来解决这个问题,但是这似乎是相当的笨拙.
有没有办法在EJS文件中使用资产助手?
解决方法
实际上,有一种方法来链接.jst.ejs.erb文件,尽管它是相当无证的,我只是通过查看EJS测试用例来找到它.您可以告诉EJS使用{{}}(或[%%]或任何您想要的)而不是<%%>,然后ERB将不会尝试评估您的EJS调用.
确保在你的代码中需要EJS(我刚刚在我的Gemfile中包含gem’ejs’),然后创建一个初始化器(我称之为ejs.rb),包括以下内容:
EJS.evaluation_pattern = /\{\{([\s\S]+?)\}\}/ EJS.interpolation_pattern = /\{\{=([\s\S]+?)\}\}/
然后,请确保将您的模板重命名为.jst.ejs.erb,并替换现有的<%%>使用{{}}的EJS解释代码.如果要使用除{{}}之外的其他东西,请更改初始化程序中的正则表达式.
我希望在Sprockets中有一个选项来通过配置来处理这个,而不是明确地包含EJS,但是到目前为止,我无法做到这一点.