如何在 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 资产文件中访问控制器实例变量

如何在 Rails 中为现有模型生成表单?

如何在 Rails 4 中为 AngularJS 更正设置根路由?

如何在 Rails 中为现有模型添加自动完成标记?

如何在 Rails 中为博客创建单独的管理界面