2012-02-10 7 views
2

私は、リクエストされた時点でカスタマイズされたjavascriptファイルを提供します。私はコントローラーでこれを行います。私はテンプレートビュー/ controller_name/custom.js.coffeeを作成しましたRailsビューでリアルタイムにカフェスクリプトを縮小する

最初に私はコーヒースクリプトが生産でコンパイルされていない問題を遭遇しましたが、これは2つの宝石コーヒーレールと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

どのくらいカスタマイズしていますか?なぜスクリプトの静的資産の大部分を作って、スクリプトが実行時に動的応答のために参照できるいくつかの変数を挿入してはどうでしょうか。 –

+1

なぜあなたはすべてのコードをassets/javascriptsフォルダに入れないのですか?次に、rakeアセットを作成します。プリコンパイル – CodeGroover

答えて

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

私のためには機能しません。 Afterフィルタが実行されると、Uglifierは醜いスクリプトを返しますが、ブラウザと元のスクリプトを元のスクリプトに戻します。 – panzi

+0

ええと、キャッシングを無効にするとうまくいきます。 Hmpf。 – panzi

+0

また、cache_page/after_filterの呼び出しを並べ替えると、uglifyのステップがキャッシュされません。 – panzi

関連する問題