我有一个使用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") %>"/>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top