2

Rails 3.1でcoffeescript、jQuery、およびスプロケットを使用すると、coffeescriptファイルは次のようなブロックにコンパイルされます。

(function() {
 var a;
 var b;
 var c;
 foo = function() { 
  alert("foo");
 }
 bar = function() {
  alert("bar");
 }

}).call(this);

これにより、関数fooとbarがグローバルスコープから外れるように見えるため、barはfooで呼び出すことができますが、どちらもhtmlコードから呼び出すことはできません。select onchange要素からfooを呼び出そうとすると、「変数が見つかりません:foo」が表示されます。

現在の回避策は、グローバルに使用可能なすべての関数を.jsファイルに移動することです。しかし、これを行う正しい方法は何ですか?

ありがとう

4

1 に答える 1

5

トップレベルオブジェクト(名前空間用)を宣言し、アクセスする必要のあるすべての関数をそれにアタッチすることを好みます。

ファイルの先頭に、次のようなものを追加します

window.App = window.App || {};

次に、関数を宣言します

var foo = function() { ... };
var bar = function() { ... };

最後に、必要なエクスポート機能

window.App.foo = foo;

やや関連情報-Rails3.1とCoffeescriptでの「変数が見つかりません」エラー

于 2011-07-13T20:40:55.270 に答える