1

coffeescript ファイルで関数を次のように定義しました。

showAlert = () ->
  alert("asdfsd")

ビューから、この関数を次のように呼び出します。

:javascript
  jQuery(function(){
   showAlert();
  });

しかし、関数はトリガーされていません。ここで何が問題なのですか?

4

1 に答える 1

1

これは、Coffeescript がトランスパイルされた Javascript 出力を即時呼び出し関数式(IIFE) に自動的にラップするためです。つまり、Coffeescript ブロック内で宣言する関数はグローバル スコープにありません。したがって、showAlertjQuery ブロックがアクセスできるスコープ/クロージャーに関数が存在しないため、jQuery ブロックは関数を見つけることができません。

あなたができること (それが素晴らしいアイデアかどうかはわかりませんが) は、window名前空間で「グローバル」関数を宣言することです。

window.showAlert = -> alert('asdfasdf')

そして、jQuery ブロックから呼び出します。

javascript:
  jQuery(function($){
    window.showAlert();
  });

window名前空間はすべての (ブラウザー) スコープで使用できるため、これは機能します。

于 2013-07-28T12:39:11.223 に答える