【问题标题】:How to write the content of external .js files in a js.haml file (Ruby on Rails)如何在 js.haml 文件中写入外部 .js 文件的内容(Ruby on Rails)
【发布时间】:2015-05-04 16:10:23
【问题描述】:

我正在使用 Ruby on Rails 框架,我喜欢它。

到目前为止,我一直在使用 show.html.haml 来查看我的视图,并且一切正常。我们想添加另一个支持 GET 请求的选项,该选项包含后修复 .js。为此,我们向控制器添加了另一个名为 show.js.haml 的并行视图。 Rails 的“魔力”知道将 .html 后修复请求路由到第一个,将 .js 后修复请求路由到后者。

问题是当请求被路由到show.js.haml 视图时,我找不到编写外部.js 的内容 文件的方法。我得到的只是文本本身(即<script src="myscripts.js" type="text/javascript"></script>),而不是文件的实际内容。

我找到了一个肯定不是最佳的解决方案(性能、稳健性等):将文件下载到服务器并使用以下功能:

!= File.open(Rails.root.join('public' , 'js',  'jquery-1.11.2.min.js'), 'rb').read

这是我发现实际编写 .js 文件内容的唯一方法。

必须有 Ruby 的优雅方式将外部 .js 文件的内容写入 .js.haml 文件。

任何帮助将不胜感激。 谢谢!

【问题讨论】:

  • 您真的需要文件的内容还是只需要能够使用它?
  • 感谢您的回答。我不想用它,我需要文件的内容。

标签: javascript ruby-on-rails view haml external


【解决方案1】:

我认为您需要的是 rails 资产管道 http://guides.rubyonrails.org/asset_pipeline.html

【讨论】:

  • 谢谢你,但我之前已经阅读了整个文档 :) 管道资产肯定允许我使用外部 .js 文件,但我正在寻找其他东西 - 我需要从外部 .js 文件中提取内容(稍后使用)。
【解决方案2】:

我不确定你为什么需要这个以及在哪种情况下这是一个好主意,但你可以试试这个(未经测试):

# show.js.haml

// some javascript
= render file: Rails.root.join('public' , 'js',  'jquery-1.11.2.min.js')
// or
"#{render file: Rails.root.join('public' , 'js',  'jquery-1.11.2.min.js')}"

当然,这仅适用于可访问的本地资源,但是,这就是 <script src= 的用途。

编辑

如果需要将文件内容作为字符串存储在变量中,可以使用capture。对于远程文件,您可以使用open-uri,它是 Ruby 标准库的一部分。

# show.js.haml
- content = capture do
- render file: Rails.root.join('public' , 'js',  'jquery-1.11.2.min.js')

# for remote files
- content = open('http://url.to/file.js').read

您可以稍后打印内容:

= content

【讨论】:

  • 谢谢您,但您的回答无法帮助我提取外部 .js 文件的内容。
  • 这应该在 js 响应中打印文件的内容,就像许多语言中的“包含”或“要求”一样。这不是你的问题吗?或者您可能正在寻找文件本身的内容,作为存储在变量中的“字符串”,以便您可以例如操作它?请澄清。
  • 是的,我正在寻找文件本身的内容,作为一个字符串。在这种情况下有什么建议吗?
  • 谢谢,虽然我已经有了本地文件的解决方案。我需要找到一种方法来对外部 .js 文件做同样的事情......在这种情况下有什么解决方案吗?
  • 是的,确实如此!非常感谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-30
  • 1970-01-01
  • 2012-07-29
  • 1970-01-01
  • 2012-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多