coffeescript ファイルで関数を次のように定義しました。
showAlert = () ->
alert("asdfsd")
ビューから、この関数を次のように呼び出します。
:javascript
jQuery(function(){
showAlert();
});
しかし、関数はトリガーされていません。ここで何が問題なのですか?
coffeescript ファイルで関数を次のように定義しました。
showAlert = () ->
alert("asdfsd")
ビューから、この関数を次のように呼び出します。
:javascript
jQuery(function(){
showAlert();
});
しかし、関数はトリガーされていません。ここで何が問題なのですか?
これは、Coffeescript がトランスパイルされた Javascript 出力を即時呼び出し関数式(IIFE) に自動的にラップするためです。つまり、Coffeescript ブロック内で宣言する関数はグローバル スコープにありません。したがって、showAlert
jQuery ブロックがアクセスできるスコープ/クロージャーに関数が存在しないため、jQuery ブロックは関数を見つけることができません。
あなたができること (それが素晴らしいアイデアかどうかはわかりませんが) は、window
名前空間で「グローバル」関数を宣言することです。
window.showAlert = -> alert('asdfasdf')
そして、jQuery ブロックから呼び出します。
javascript:
jQuery(function($){
window.showAlert();
});
window
名前空間はすべての (ブラウザー) スコープで使用できるため、これは機能します。