2010-09-27 92 views

回答

5

好吧,也許我有一個解決辦法:

respond_to do |format| 
    format.js { self.response_body = minify(render_to_string) } 
end 

這完美的作品。當然,關鍵是方法minify方法。你會發現很多JS縮小器。例如,你可以使用這個(如果許可證允許的話):http://github.com/thumblemonks/smurf/raw/master/lib/smurf/javascript.rb - 它基於Crockford的jsmin.c。

如果你把這個文件到您的lib,需要它,你的縮小方法可以是這樣的:

def minify(content) 
    min = Smurf::Javascript.new(content) 
    min.minified 
end 

希望它能幫助你。

如果你打算自動縮小,那麼你可能應該去找一塊中間件。令人驚訝的是我找不到任何東西(有很多針對CSS/JS,但它是關於靜態資產而不是動態內容),但編寫它並不是一個這樣的問題。

+0

感謝pawien!這給了我肯定的想法。 :)將結果傳遞給塊並用縮小器處理它似乎是一個很好的解決方案。然後我只需要弄清楚如何緩存輸出。我會在今天和明天玩這個遊戲..我可能會誤導你。 :D – 2010-09-29 16:11:52

+2

有沒有什麼辦法在Rails3.2中做到這一點,只使用自己的資產管道內置功能? – 2012-06-28 11:23:34

+0

謝謝radek!好的解決方案納扎爾,添加我的軌道3修改位下面 – djburdick 2013-05-05 18:39:32

3

鋼軌3使用內置Uglifier法(資產管道默認)

見拉狄克的代碼上方和正交換這

def minify(content) 
    Uglifier.new.compile(content) 
    end 
12

對於軌道4:

render js: Uglifier.new.compile(render_to_string)