4

すべてのcoffeescriptコンパイラがスクリプトを無名関数でラップするかどうかはわかりませんが、Railsが行っているのはそれです。このカプセル化を無効にするにはどうすればよいですか?

いくつかの初期化関数を1つのcoffeescriptファイルに入れてから、ページ上の<script>タグからそれらの1つを呼び出します(各ページが異なる初期化子を呼び出すようにします)。初期化関数がカプセル化されている場合、これは不可能です。

Coffeescript初期化関数:

initializerA = -> console.log 'foo'
initializerB = -> console.log 'bar'

ページ上のコード:

<script>$(document).ready(initializerA)</script>

システム:コーヒーレール3.2.1、レール3.2.3、ルビー1.9.3

4

2 に答える 2

7

Coffeescriptのドキュメントによると、カプセル化/安全性のために、すべてのスクリプトは無名関数でラップされます。グローバルスコープ内で何かにアクセスできるようにするには、次のようにします。

window.myvar = myvar
于 2012-06-13T16:35:13.943 に答える
2

次のようにすると、複数のファイルを1つのファイルにまとめることができます。

((Demo, $, undefined_) ->
  Demo.utils = Demo.utils or {}

  Demo.utils.bacon = (->
      alert("bacon called")
    )()

  Demo.utils.eggs = (->
      alert("eggs called")
    )()
) window.Demo = window.Demo or {}, jQuery

次に、ページで適切なメソッドを呼び出します。

Demo.utils.bacon();

このパターンの良い説明はここにあります。

于 2012-06-13T16:35:14.243 に答える