2012-06-13 35 views
3

我不知道所有的coffeescript編譯器是否將它們的腳本封裝在匿名函數中,但這正是我看到的Rails所做的。我如何禁用此封裝?如何不封裝Coffeescript

我想在一個coffeescript文件中放入幾個初始化函數,然後從頁面<script>標籤中調用其中的一個(以便每個頁面調用不同的初始化器)。如果初始化函數被封裝,這不可能。

CoffeeScript的初始化函數:

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

對網頁代碼:

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

SYS:咖啡導軌3.2.1,3.2.3的Rails和Ruby 1.9.3

+0

個可能的重複[如何使用選項「--bare」在Rails 3.1的CoffeeScript?](http://stackoverflow.com/questions/6099342/how-can-i-use-option-bare-in-rails -3-1-for-coffeescript) –

+0

@TrevorBurnham,的確如此。但是,我找不到那個問題,使用與這個問題及其答案有關的搜索詞,所以這個問題必須具有一定的價值。 – JellicleCat

+0

這就是重複項被關閉而不是被刪除的原因:它允許他們指出一個更加規範的問題。 –

回答

7

Coffeescript文檔說,所有腳本w爲了封裝/安全起見,請將其封裝在匿名函數中。爲了使全球範圍內訪問的東西請執行以下操作:在您的網頁

((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 

然後,只需調用適當的方法:

window.myvar = myvar 
2

你可以做這樣的事情把幾個到一個文件中:

Demo.utils.bacon(); 

這種模式的一個很好的解釋可以found here.

+0

+1的細節。 (另一個人對我來說更容易消化。) – JellicleCat