Attention! Translated article might be found on my English blog.

2015年1月25日日曜日

CoffeeScriptで作成した関数を通常のJavaScriptから使う

簡単な解決方法としては、'foo = ->' と書くのではなく、'window.foo = ->' と書くと良いようです。

参考: Rails - Calling CoffeeScript from JavaScript - Stack Overflow

例えば下記のようなCoffeeScriptの関数hogeがあったとして、

# coffee.coffee
hoge = ->
    console.log("hoge")
    return

これを以下の静的htmlから呼ぶ場合、

<html> 
<head>
<script type="text/javascript" src="./coffee.js"></script>
</head>
<body onload="hoge();">
</body>
</html>

CoffeeScript側をひとまずwindow.hoge = ->とすることで実行することが可能です。

# coffee.coffee
window.hoge = ->
    console.log("hoge")
    return

真面目にやるなら名前空間を定義してその中で完結させるのが良いみたいですね。

もうひとつlazyな方法として、コンパイルの際に-b(--bare)を指定することで、即時関数でラッピングせず、グローバル変数として扱う方法があるようです。