2010-09-27 40 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)