【问题标题】:Rails with backbone-rails: asset helpers (image_path) in EJS files带有主干导轨的 Rails:EJS 文件中的资产助手(image_path)
【发布时间】:2012-01-09 03:35:59
【问题描述】:

我有一个使用 codebrew/backbone-rails 的 Rails 3.1 应用程序。在 .jst.ejs 模板中,我想包含一个图像,如下所示:

<img src="<%= image_path("foo.png") %>"/>

当然,资产助手在 JavaScript 中不可用。

链接 ERB (.jst.ejs.erb) 不起作用,因为 EJS 语法与 ERB 冲突。

这是我所知道的:

  • 资产助手在浏览器中不可用,所以我需要在服务器端运行它们。
  • 我可以通过让服务器将各种资产路径转储到 HTML 中(通过数据属性或 &lt;script&gt; 和 JSON)并在 JS 中读回它们来解决此问题,但这似乎相当笨拙。

有没有办法以某种方式在 EJS 文件中使用资产助手?

【问题讨论】:

  • 您还可以使用_.templateSettings underscore.js template function 重新定义 ejs 标签(如果它们确实是 ruby​​-ejs gem 文档中建议的 Underscore 模板功能的端口),从而允许您使用 @ 987654326@ 或您选择的其他标记

标签: ruby-on-rails backbone.js erb asset-pipeline ejs


【解决方案1】:

实际上,有一种方法可以链接 .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,但目前,据我所知,没有办法做到这一点。

【讨论】:

  • 这正是我想要的。非常感谢您发帖:)
  • 嗯,这对我不起作用,是的,我重新启动了 rails。它只是忽略该选项并继续使用默认评估/插值
  • @zanedev 你把选项放在哪里了?你能创建一个要点吗?
  • 我完全按照说明操作,在 rails 项目的初始化程序中创建了一个 ejs.rb 文件并重新启动,只是似乎忽略了该设置。我没有代码了,因为我们现在走了不同的方向。可能是我的环境的其他问题我想我不会担心它,除非其他人出现相同的结果
【解决方案2】:

我可以看到两种方式。两者都不是很好。

当您说 &lt;%%= variable %&gt; 时,ERB 会将其呈现为 &lt;%= variable %&gt;,因此您可以双倍逃避所有内容asset_tags,这将在途中通过一个 ERB 通道幸存下来到 EJS。

如果你觉得这太恶心了......

如何制作一个带有 ERB 扩展名的不同 javascript 文件来定义您的资产路径?然后使用资产管道来要求它。

所以说assets.js.erb 定义如下:

MyAssets = {
  'foo': <%= image_path("foo.png") %>,
  ...
}

然后在清单顶部附近的某个地方需要这个。然后引用在 EJS 中有效的全局变量。

【讨论】:

  • 迄今为止最好的选择 MyAssets 之一,继续努力(也适用于 i18n)
【解决方案3】:

对于那些愿意尝试 HAML 而不是 EJS 的人:使用 haml-coffeehaml_coffee_assets 对我来说也很有效。

您可以在 .hamlc.erb 文件中包含以下内容:

%img(src="<%= image_path('foo.png') %>")

(它仍然没有给你路由助手,只有资产助手。)

【讨论】:

    【解决方案4】:

    Ryan Fitzgerald 非常友好地发布了他的 JavaScript 资产助手(使用 ERB 预编译)的要点:https://gist.github.com/1406349

    【讨论】:

    • 这是个好主意。感谢发帖。
    【解决方案5】:

    您可以通过以下 gem 使用相应的 Javascript 助手: https://github.com/kavkaz/js_assets

    最后(在安装和配置之后)你就可以像这样使用它了:

    <img src="<%= asset_path("foo.png") %>"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多