4

Rails 3.1 (rc5) を使用しており、レール (またはスプロケット) に含めたすべての coffeescript ファイルが、上部と下部で JavaScript を初期化する際に追加されていることに気付きました。つまり、空の .js.coffee ファイルが次のように出力されます。

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

これは、JavaScript のスコープを台無しにしてしまうため、いらいらさせられます (自分が何をしているのか本当にわからない場合を除きます)。私は通常、すべての JavaScript クラスを別々のファイルに分けています。関数コードでクラスをラップすると、クラスが互いに範囲外になるだけだと思います。または、少なくとも、未定義のエラーが継続的に発生しているため、それらにアクセスできないようです。

これをオーバーライドする方法はありますか?スプロケットのこのファイルは、このコードの追加に関係しているようです: https://github.com/sstephenson/sprockets/blob/master/lib/sprockets/jst_processor.rb

関数ですべてをラップすると、DOM がロードされるまで何も実行されないため、利便性が向上するように思えるかもしれませんが、私が知る限り、それは私のスコープを台無しにします。

4

2 に答える 2

10

オブジェクトをグローバル スコープに入れるつもりですか? CoffeeScript は通常、変数を誤ってグローバル スコープに漏らさないように、無名関数でコードをラップしていると思います。オフにする方法がない場合は、グローバル スコープにしたいものを window オブジェクトに具体的に追加することをお勧めします。

window.myGlobal = myGlobal;

コードを関数スコープ内に置き、オブジェクトをグローバル スコープに追加することを明示することは、最近の JavaScript のベスト プラクティスのようです。これは通常、CoffeeScript が自動的に行うのを目にするものです。

于 2011-08-04T22:00:50.320 に答える
2

すべてをグローバルスコープに入れたくありません。他のライブラリと衝突しないように名前空間を設定できるモジュールまたはシステムのようなモジュールが必要です。読んでみる

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

于 2011-08-06T09:06:26.907 に答える