5

Rails3.2.9を使用しています。.js.coffeeディレクトリ内のファイルにCoffeeScriptコードを追加すると/app/assets/javascripts、すべてのWebページで結果のJavaScriptが取得されます。問題は、すべてのJavaScriptが次のようにラップされていることです。

(function() {
  // my code
}).call(this);

したがって、私が定義したメソッドは、他のファイルに書き込んだ他のCoffeeScriptコードには表示されません。Railsで再利用可能なCoffeeScriptクラスとメソッドのセットを作成する適切な方法は何ですか?

4

2 に答える 2

7

最も簡単なことは、すべてのクラスに名前を付けることです。アプリケーションが「app」と呼ばれる場合、何かが起こる前に初期化コードで:

// Set up the namespace.
window.app = { }

そして、すべての.coffeeファイルで:

class app.Pancakes
    #...

次に、グローバル名前空間があり、その名前空間を介してすべてを参照します。

pancakes = new app.Pancakes

単純な関数についても同様です。

app.where_is = (pancakes, house) -> ...

# And elsewhere...
x = app.where_is(...)

名前空間を設定して部分的に隠すにはさまざまな方法がありますが、それらはすべて上記のバリエーションであり、単純な名前空間は Rails アセット パイプラインでうまく機能します。

于 2012-11-15T07:21:04.107 に答える
4

また、次のように、coffeescript ファイル内でクラスを定義できます。

class this.Person
  constructor: (attr = {}) ->
    ...

このようにして、定義はグローバル名前空間に関連付けられます。

于 2012-11-15T09:47:35.317 に答える