2

内のHTMLからJavaScriptの関数を呼び出すと、レール3.1のスプロケットは、CoffeeScriptのファイルがブロックにコンパイルしてあるように:のCoffeeScript、jQueryのを使用して、レール3.1

(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ファイルに移動することです。しかし、これを行う正しい方法は何ですか?

おかげ

+1

私はDogbertと同じことをしますが、これを他のオプション(これを含む)についてチェックしたいかもしれません。http://vimeo.com/24391448 – house9

答えて

4

私は(名前空間のための)トップレベルのオブジェクトを宣言し、私はそれに、へのアクセスが必要なすべての機能を付加することを好みます。あなたのファイルの先頭に

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

のようなものを追加し、あなたの関数を宣言

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

エクスポート機能が

window.App.foo = foo; 

やや関連情報必要な最後に、 - "Can't find variable" error with Rails 3.1 and Coffeescript