2

app/assets/javascripts/custom.js に関数定義を含む小さなカスタム JavaScript ファイルを作成しました

round_number = function(num, dec) {
  return Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec);
};

ファイルがアセット パイプラインに挿入されるため、アプリケーションは正常に動作します。次に、学習目的で、それを coffescript に変換しました。

round_number = (num, dec) ->
  Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec)

しかし、驚いたことに、アプリケーションは機能しませんでした。coffescript が翻訳された localhost:3000/assets/custom.js をチェックインしました。

(function() {
  var round_number;

  round_number = function(num, dec) {
    return Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec);
  };

}).call(this);

必要な場所で関数を使用できないようにする余分なラッピングはなぜですか?

coffescript 関数を custom.js.coffee ファイルではなく app/assets/javascripts/orders.js.coffee (ここで Order は私のクラス) に挿入すると、予想される JavaScript に変換されます。

より整然とした共有JavaScript関数を別のファイルに入れたかったのです。関数を orders.js.coffee に入れても、アプリケーション全体で利用できることはわかっていますが(それが私が達成したいことです)、私は困惑しています。ここで見逃しているベストプラクティスはありますか?

- - 編集 - -

Rails 3.1とCoffeescriptで「Can't find variable」エラーから理解した

Rails アプリケーションを次のように整理すると思います。

1) ファイル app/assets/javascripts/global.js.coffee を作成して、すべてのグローバル変数と関数を含めます。このファイルに行を入れます

window.Global ||= {}

名前空間グローバルを定義します。関数を次のように定義します。

Global.function_name = (arguments) ->
  ...

2) 関数を次のように呼び出します。

Global.function_name(arguments)
4

1 に答える 1

0

はい、グローバルに利用できるものが必要な場合は、 のプロパティとして設定しますwindow。Coffeescript コンパイラは、コードを匿名関数でラップして、偶発的な名前の衝突を防ぎます。

于 2013-01-25T17:10:51.900 に答える