【问题标题】:Why the heck is Rails 3.1 / Sprockets 2 / CoffeeScript adding extra code?为什么 Rails 3.1 / Sprockets 2 / CoffeeScript 添加额外的代码?
【发布时间】:2011-10-20 09:51:12
【问题描述】:

使用 Rails 3.1 (rc5),我注意到我包含 rails(或 sprockets)的任何咖啡脚本文件都在顶部和底部添加了初始化 javascript。换句话说,一个空白的 .js.coffee 文件输出如下:

(function() {
}).call(this);

这很烦人,因为它搞砸了我的 javascript 范围(除非我真的不知道自己在做什么)。我通常将我的所有 javascript 类分成单独的文件,并且我相信让该函数代码包装我的类只会使它们彼此超出范围。或者,至少,我似乎无法访问它们,因为我不断收到未定义的错误。

有没有办法覆盖它? sprockets 中的这个文件似乎与添加此代码有关: https://github.com/sstephenson/sprockets/blob/master/lib/sprockets/jst_processor.rb

我知道将所有内容包装在一个函数中似乎是一种额外的便利,因为在加载 DOM 之前什么都不会运行,但据我所知,它只会弄乱我的范围。

【问题讨论】:

标签: coffeescript ruby-on-rails-3.1 sprockets


【解决方案1】:

您是否打算将您的对象放入全局范围?我认为 CoffeeScript 通常将代码包装在匿名函数中,这样它就不会意外地将变量泄漏到全局范围内。如果没有办法将其关闭,您最好的选择可能是专门将您希望在全局范围内的任何内容添加到窗口对象:

window.myGlobal = myGlobal;

如今,将代码放在函数范围内并明确将对象添加到全局范围内似乎是 javascript 的最佳实践,我通常会看到 CoffeeScript 自动执行此操作。

【讨论】:

【解决方案2】:

您不想将所有内容都放在全局范围内。您想要一个模块或类似系统的模块,您可以在其中命名事物,以免与其他库发生冲突。读一读

https://github.com/jashkenas/coffee-script/wiki/Easy-modules-with-coffeescript

【讨论】:

    猜你喜欢
    • 2017-07-06
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    相关资源
    最近更新 更多