【问题标题】:Coffeescript and Haml with unobtrusive Javascript (data-remote) in Rails 3.1在 Rails 3.1 中使用不显眼的 Javascript(数据远程)的 Coffeescript 和 Haml
【发布时间】:2012-01-06 07:56:03
【问题描述】:

我搜索了 le interwebs,但我没有找到和我遇到同样问题的人,所以我在这里提出我的问题。

我刚开始使用带有 Compass、Haml 和 CoffeeScript 的 Rails 3.1 并遇到了问题。当我将位于 app/assets/javascript/index.js 中的特定于控制器的 JavaScript 文件重命名为 index.js.coffee 并将 JavaScript 代码转换为 CoffeeScript 时,一切都按预期工作 - 浏览器请求该文件并即时编译为 JavaScript。 CoffeeScript 文件中的更改也会触发重新编译。

但是,当我尝试使用不显眼的 JavaScript (:remote => true) 执行此操作并将位于视图文件夹 app/views/index/index.js.haml 中的已经工作的 JavaScript 文件重命名为 index.js.coffee.haml 并翻译包含的代码时,Rails 无法识别它作为需要编译的 CoffeeScript。

我做错了什么?我是否必须主动为视图启用 CoffeeScript 评估?在哪里?

【问题讨论】:

  • 看看如果你改用 ERB 会发生什么。考虑到 HAML 的工作原理,我看不出它与 CoffeeScript 甚至 javascript 一起工作得很好。

标签: ruby-on-rails coffeescript haml unobtrusive-javascript


【解决方案1】:

正如您所提到的,Rails 3.1 中引入的资产管道会自动为您将咖啡脚本资产编译成 javascript。视图目前不是这种情况:只会编译 app/assets/javascripts 中的文件。

要在视图中使用 Coffeescript,您暂时需要使用 https://github.com/markbates/coffeeBeans

更新:根据 Kyle Heironimus 在下面的评论,似乎 coffe-rails 可以提供此功能(请参阅 https://github.com/rails/coffee-railshttp://rubygems.org/gems/coffee-rails

【讨论】:

  • 谢谢!这似乎是朝着正确方向迈出的一步,但并不能完全解决我的问题。我现在可以将我的文件重命名为index.js.coffee,它将被正确处理为 CoffeeScript。但是,我需要先用 HAML 解析它,因为我需要分配变量。当我尝试index.js.coffee.haml 时,Rails 3.1 仍然无法识别模板。甚至可能吗?或者是否有另一种方法可以将变量从控制器传递到 CoffeeScript,而无需使用 HAML 将它们转换为 JSON?
  • 好的,在阅读this comment 的相关问题后,我决定不在视图中使用CoffeeScript,因此坚持使用index.js.haml。有没有人在不显眼的 Javascript 中将 Ruby 变量传递给 JS 模板时遇到任何性能问题?
  • 等等,等等,等等,你刚才说你坚持使用 index.js.haml 吗?我认为根据您刚才提到的评论,正确的方法是使用 index.js.coffee 而不是 index.js.haml! .haml 假设您仍将在 HAML 文件中呈现 javascript,而 .js.coffee 将是纯粹的不引人注目的,特别是如果您使用现在几乎每个人都建议的 HTML 5 数据标签。你能解释一下你的决定吗?这让我有点困惑。
  • 不,我决定回退到纯 Javascript/Haml 的原因是我不确定 Haml(或我现在使用的 Slim)是否在每次请求时重新编译 Coffeescript 代码,所以性能考虑。但是,我正在构建的当前应用程序不使用不显眼的 Rails/JS 驱动程序,因为我必须在部署请求之前/之后处理很多事情。因此,我现在在页面加载时将整个 JS 代码传输到浏览器。也许有人可以阐明重新编译的问题?
  • 哦,它又回到我身边了 ;) 另一个问题是在返回 JS/Coffee 视图时绕过资产管道 - 所以没有缩小/加扰!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-30
  • 2018-03-05
  • 2011-03-31
  • 2012-02-01
  • 2011-12-21
  • 2011-12-20
  • 2011-11-08
相关资源
最近更新 更多