如何在 Rails 3.1 中为 CoffeeScript 使用选项“--bare”?
Posted
技术标签:
【中文标题】如何在 Rails 3.1 中为 CoffeeScript 使用选项“--bare”?【英文标题】:How can I use option "--bare" in Rails 3.1 for CoffeeScript? 【发布时间】:2011-08-31 06:10:52 【问题描述】:有人知道如何在 Rails 3.1 中使用此选项吗?
现在 CoffeScript 会在每个文件上添加一个带有 .call(this)
的函数,但我想删除它。
编辑:
“Can't find variable” error with Rails 3.1 and Coffeescript”和“Pattern for CoffeeScript modules”有我想要的。我将更改我的全局变量以使用 @global
范围。
【问题讨论】:
很大程度上取决于您用于 CoffeeScript 编译的 gem。gem 'coffee-script'
Rails 3.1 中的标准
【参考方案1】:
我建议不要这样做。请参阅我在Pattern for CoffeeScript modules 的回答,了解其中的一些原因。 (“使您的 CoffeeScript 代码与开箱即用的 Rails 3.1 不兼容”是另一个原因。)最好只使用
window.a = b
甚至
@a = b
当您尝试将某些内容导出到全局范围时,而不是 a = b
。
在以前的 Rails 3.1 版本中,启用了 bare
编译。这是classified as a bug,已在 RC1 中修复。
虽然我强烈建议您不要这样做,但以下是重新打开裸编译的方法:添加
Tilt::CoffeeScriptTemplate.default_bare = true
致您的environment.rb
。
【讨论】:
是的,我同意。我开始一个新项目,所以我想从正确的方式开始,我会遵循你的策略。谢谢:) 我同意如果您只有一些咖啡脚本文件,但如果您为每个类/对象使用咖啡脚本文件,您不想为每个类/对象定义一个全局变量。无论如何都要为答案 +1【参考方案2】:我确实建议利用 CoffeeScript 的闭包并遵循 CommonJS 模块模式。但有时,只是有时,想要使用 --bare 选项是可以的。就我而言,在渲染 Jasmine 规范助手时,我可以将事物保持在顶层,并利用所述 Jasmine 规范中的 include Sprockets 指令。
为此,我创建了“sprockets-blackcoffee”gem,您可以在此处了解它。 https://github.com/metaskills/sprockets-blackcoffee
【讨论】:
我现在意识到一切都取决于观点和项目类型。和你的情况一样,我同意。 :) 非常漂亮。最近几天你的东西出现了很多,因为我在 Rails 3.2 中使用 minitest 和 CoffeeScript ......干杯! :-)以上是关于如何在 Rails 3.1 中为 CoffeeScript 使用选项“--bare”?的主要内容,如果未能解决你的问题,请参考以下文章
Rails:如何在 Rails 中为 Devise 设置密钥?
Rails:在 CoffeeScript 或 JavaScript 资产文件中访问控制器实例变量