在Rails的3.1,我試圖找出如何移動的幾個班的CoffeeScript從我的控制器默認的CoffeeScript文件(home.js.coffee
)到另一個文件了,以結構整個一點點。構造咖啡代碼?
有誰知道如何「包括」一個CoffeeScript的文件到另一個?
在Rails的3.1,我試圖找出如何移動的幾個班的CoffeeScript從我的控制器默認的CoffeeScript文件(home.js.coffee
)到另一個文件了,以結構整個一點點。構造咖啡代碼?
有誰知道如何「包括」一個CoffeeScript的文件到另一個?
你想要做什麼是出口功能。舉例來說,如果你開始與
class Foo
...
class Bar extends Foo
...
,你決定你移動Foo
到自己的文件,該文件應該像
class Foo
...
window.Foo = Foo
(其中window.Foo = Foo
使得Foo
一個全球性的),和Bar
的文件應該以Sprockets指令開始
#= require Foo
(假設您已經命名爲Foo
的文件Foo.js.coffee
)。每個文件獨立編譯爲JS,但鏈輪將確保Bar
之前包含Foo
。
需要注意的是,作爲一種快捷方式,你可以擺脫window.Foo = Foo
線,而是寫
class window.Foo
...
或者乾脆
class @Foo
...
定義一個名爲Foo
類附加到的window
目的。
我不知道這是直接可能(但有人隨時糾正我)。
我的理解是,CoffeeScript的解釋程序運行鏈輪合併您的所有資產之前。由於.coffee文件中的註釋不會出現在輸出中,並且由於Sprockets使用//=
代碼註釋指令來構建所有內容,所以我認爲目前還沒有辦法在CoffeeScript中創建Sprockets指令。
你仍然可以將你的工作分解成多個.coffee文件,並利用一個父指令的javascript文件來組合這些部分(它可能只包含Sprockets指令,就像股票application.js在Rails 3.1中發佈的一樣) 。使用Sprockets //= require_tree
指令,你可以拆分你的CoffeeScript,並且仍然保持你的應用程序的組織性,但是你仍然會在管理Sprockets的時候留下純樸的Javascript文件。
This問題可能更好一點解釋資產的管道。在這裏的邊緣文檔中還有一些Sprockets幫助器:http://edgeapi.rubyonrails.org/classes/ActionView/Helpers/SprocketsHelper.html#method-i-sprockets_javascript_include_tag,但是這會將工作推到可能變得很難看的視圖中。
希望有幫助!
不知道鏈輪是如何工作的,但是'/ * * /'的評論保持在CoffeeScript的輸出。 '/ * // = ... * /'會起作用嗎? – 2011-05-28 04:40:56
在CoffeeScript代碼中,您可以簡單地使用'#= ...' – 2011-05-28 13:38:24
當使用window
對象共享你的代碼的不同部分之間的功能可以工作得很好的地方,它可以當你在一個大/複雜的代碼庫工作得有點醜陋。此外,你必須手動加載所有的依賴關係,這也會讓人有些沮喪。許多人只是最終在每個請求中加載所有內容,而不管該特定頁面實際需要什麼。
有很多庫試圖解決這些問題,並使文件之間的導出和導入功能更易於管理。今天比較常見的一個是RequireJS,它是CommonJS AMD specs的執行。您可以找到其他庫和它們之間的比較here,並且有一篇關於如何使用這些庫在Addy Osmani blog上編寫模塊化JavaScript的精彩教程 - 其中還討論了ES.next中即將推出的新模塊系統,這也很有趣。
我個人很喜歡NodeJS's modules system(與exports
對象和require
功能),所以我用node-browserify將它打包了對客戶端的工作壓力太大。雖然這不允許像AMD規範那樣以異步方式動態加載依賴項,但它確實允許在客戶端和服務器端很好地共享相同的JavaScript代碼,這對我來說是一個巨大的好處(主要是因爲我與服務器端的NodeJS一起工作,所以我不確定這對你有多重要),並且通過解析你的代碼,它可以很好地將所有的依賴關係打包在一起(因此它們可以同步到require()
d) JavaScript代碼並尋找簡單的require()
調用來確定給定腳本運行所需的內容。
感謝您的回答! – plang 2011-11-29 07:18:55
你也可以做這樣的:
@app = window.app ? {}
app.Foo = Foo
這將使app
包含所有全局類和window.app ? {}
可以確保您只會造成一個app
。
使用的蛋糕,你可以定義文件的順序和像縮小還有其它自定義的步驟等
確保您指定所有咖啡文件合併成單一的.js輸出文件。
https://github.com/jashkenas/coffee-script/wiki/[HowTo]-Compiling-and-Setting-Up-Build-Tools
偉大的答案Trevor,非常感謝。 – plang 2011-05-30 05:56:18
嘿特雷弗,你寫了咖啡書PragProg書!這是一種榮譽... – plang 2011-05-30 12:14:39
沒有概率,這是我的所爲。 :) – 2011-05-30 17:05:43