2012-04-13 71 views
0

我已經做了一些搜索,但我找不到信息。我在sinatra內部構建了一個應用程序,並使用了coffeescript模板引擎。默認情況下,編譯後的代碼被包裝成這樣:Sinatra coffeescript --bare?

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

我想刪除使用--bare標誌,所以不同的文件可以訪問類等等我正在定義。我意識到讓它更多地包含有助於抵抗可變的衝突等等,但我正在這裏做兩件主要的作品。一個是商業邏輯和數據在課堂結構中的安排。另一個是使用raphaeljs的視圖功能。我寧願將這兩部分保存在單獨的文件中。由於這樣封裝的兩個文件無法訪問數據,因此顯然不起作用。但是,如果您可以想到比使用--bare選項更好的解決方案,那麼我就是耳朵。

回答

2

光禿的編譯只是一個不好的做法。每個文件應該只向全局範圍導出與您的應用程序其餘部分有關的公共對象。

# foo.coffee 
class Foo 
    constructor: (@abc) -> 

privateVar = 123 

window.Foo = Foo # export 

Foo現在全球可用。現在,如果這種模式不切實際,也許你應該重新思考你的結構。如果你不得不導出可能的東西,你可以更好地嵌套和命名空間,這樣可以通過更少的全局變量暴露更多的數據。

+0

+1。問題中描述的場景沒有任何特殊之處;當你想讓一個對象從多個'.coffee'文件中可見時,你可以將它放在一個全局命名空間中。 – 2012-04-14 01:52:14

1

我支持亞歷克斯的答案,但如果你絕對必須做到這一點,我相信my answer to the same question for Rails 3.1適用這裏還有:放線

Tilt::CoffeeScriptTemplate.default_bare = true 

在某處你的應用程序。