2012-02-10 174 views
2

我提供了一个在请求时自定义的JavaScript文件。我通过一个控制器做到这一点。我创建了一个模板views/controller_name/custom.js.coffee实时缩小Rails视图中的coffeescript

首先,我偶然发现咖啡脚本没有在生产中编译,但这是通过将两个gem咖啡栏和uglifier移动到资产组之外。

group :assets do 
gem 'sass-rails', '~> 3.2.3' 
    gem 'mysql2' 
    gem 'yui-compressor' 
end 
gem 'coffee-rails', '~> 3.2.1' 
gem 'uglifier', '>= 1.0.3' 

现在这部分工作,但脚本不处理uglifier。我的问题是,如何缩小以这种方式提供的JavaScript?

感谢

+4

你在做多少定制?为什么不制作大量的脚本静态资产,并在运行时注入一些脚本可以引用的动态响应的变量。 – 2012-03-17 15:59:12

+1

为什么你不只是把你的代码放到assets/javascripts文件夹中?然后制作rake资源:预编译 – CodeGroover 2012-07-05 11:51:32

回答

0

写的after_filter:

class TestController < ApplicationController 
    respond_to :js 
    after_filter :uglify, :only => :custom 

    def custom 
    @ivar = 'Custom' 
    end 

    def uglify 
    response.body = Uglifier.new.compile(response.body) 
    end 
end 

其实我试过了这一点(因为我从来没有动态生成的JavaScript,我从来没有写过after_filter),和它的工作。这对于after_filter来说似乎是一个完美的例子:您的响应正文是JavaScript,并且您希望在发送给客户端之前修改您的响应(通过丑化它)。

+0

不适用于我。后过滤器运行后,Uglifier返回一个丑陋的脚本,但我仍然在浏览器和redis缓存中获取原始脚本。 – panzi 2014-07-07 16:08:44

+0

嗯,当我停用缓存它的作品。哼。 – panzi 2014-07-07 16:09:37

+0

或者当我重新调用cache_page/after_filter调用时,但是uglify步骤没有被缓存! – panzi 2014-07-07 16:31:41