2011-08-04 85 views
4

使用Rails 3.1(rc5),我注意到任何包含rails(或sprocket)的coffeescript文件都在初始化javascript的頂部和底部。換句話說,一個空白的.js.coffee文件被輸出看起來像這樣:爲什麼Rails 3.1/Sprockets 2/CoffeeScript添加額外的代碼?

(function() { 
}).call(this); 

這是刺激性的,因爲它搞砸了我的JavaScript範圍(除非我真的不知道我在做什麼)。我通常將我的所有JavaScript類分離成單獨的文件,我相信使用包裝我的類的函數代碼將它們從範圍之外放到另一個範圍內。或者,至少,我似乎無法訪問它們,因爲我不斷收到未定義的錯誤。

有沒有辦法來覆蓋這個?這似乎是這個文件在鏈輪與添加此代碼做: https://github.com/sstephenson/sprockets/blob/master/lib/sprockets/jst_processor.rb

我明白,在一個功能包裝的一切似乎是一個更加方便的,那麼不對奔跑,直到DOM被加載,但據我可以告訴它只是弄亂我的範圍。

+0

看到讀:http://stackoverflow.com/questions/6099342/how-can-i-use-option-bare-in-rails-3-1-for-coffeescript –

回答

10

你打算把你的對象放到全局範圍內嗎?我認爲CoffeeScript通常將代碼封裝在匿名函數中,以免它意外地將變量泄漏到全局範圍中。如果有沒有辦法把它關掉,你最好的選擇很可能是專門添加要在全球範圍內的窗口對象什麼:

window.myGlobal = myGlobal; 

這似乎是一個JavaScript的最佳實踐,這些天將代碼放在函數範圍內,並且明確地向全局範圍添加對象,這是我通常會看到CoffeeScript自動執行的操作。

+1

是的,我現在開始明白這一點。我正在努力將所有內容都放到全球範圍內,謝謝。 –

+1

這兩個問題是類似的: http://stackoverflow.com/questions/6685292/calling-javascript-functions-from-html-in-rails-3-1 http://stackoverflow.com/questions/6089992/着找到的變量 - 錯誤與護欄-3-1-和CoffeeScript的/ 6090251#6090251 –

相關問題