2011-10-17 12 views
2

私は資産パイプラインに苦労しています。私は私のテンプレートでこれを入れてGoogleのCDNから道場をロードしています:条件付きのJavaScriptが資産パイプラインで必要です

= javascript_include_tag 'http://ajax.googleapis.com/ajax/libs/dojo/1.6.1/dojo/dojo.xd.js', :'data-dojo-config' => %Q(dojoBlankHtmlUrl:'/blank.html', baseUrl: 'assets/', modulePaths: {custom: 'javascripts/modules'}) 

ローカルまたはCDNがダウンしている場合は実行されている場合、私はちょうどローカルバージョンへのフォールバックをしたいです。私はこれをやろうと思った:

script typeof(dojo) === "undefined" && document.write(unescape('%3Cscript src="js/libs/dojo-1.6.1.min.js"%3E%3C/script%3E')); 

しかし、私はそれが資産のパイプラインから機能するので、それは好きではない。 vendors/assets/javascripts/dojoに道場を残したい。どのようにして、資産パイプラインによって対応されるようにすることができますか。

アセットパイプラインで条件付き要求を宣言する方法はありますか。私が望むのは、いくつかのjavascriptテストを実行し、結果に応じてファイルを提供することです。

おかげ

+0

CDNの最高の機能の1つは、クライアントによってとにかにキャッシュされるべきだということです。だから、気にする必要はありません。地方開発のためには、 'javascript_inlcude_tag'を実行するだけです。その解決策があなたのために十分に保存されていない場合は、あなたの資産/ javascriptsに入れて、あなたの他のすべての時間でそれを提供する必要があります。 – phoet

+0

私はそれを得る。しかし、テンプレートにファイルを含めることなくファイルをアセットパイプラインで処理する方法があればうれしいでしょう。したがって、javascriptを使用して含めることができるpublic/assets/javascripts/dojo-1.6.1.jsファイルを生成することができます。 1.6.1が指摘となる。両方の世界の最高。 – karellm

+0

私はそれが素晴らしいアイデアだとは思わないが、味は異なる。 – phoet

答えて

1

ありがとうございました!

1つのライブラリを読み込むためにyepnopeを使用したくありません。それは過労です。ここで私はあなたの助けに基づいて、思い付いた解決策は、(スリムで書かれた)です:ベンダーで


1//資産/ JavaScriptの/、私は私のdojo.js.を持っていますテンプレートで

# Precompile these assets files 
config.assets.precompile += ['dojo.js'] 

3 /::のconfig/application.rbで

2/

= javascript_include_tag "http://ajax.googleapis.com/ajax/libs/dojo/#{Settings.dojoVersion}/dojo/dojo.xd.js", :'data-dojo-config' => %Q(dojoBlankHtmlUrl:'/blank.html', baseUrl: 'assets/', modulePaths: {custom: 'javascripts/modules'}) 
script = "typeof(dojo) === \"undefined\" && document.write(unescape('%3Cscript src=\"#{asset_path('dojo')}\"%3E%3C/script%3E'));".html_safe 

私も2の追加を要求するために、RailsのGoogleグループに掲載javascript_include_tagのオプション、:testと:localはすべての作業を処理します。我々は見るでしょう。

2

は、私はあなたがyepnope、(スピード用)並行して、このようなロードライブラリ用の軽量なライブラリを使用することをお勧めし、それはあなたのライブラリがロードされているかどうかをテストするためにいくつかの他のコードを実行するオプションを提供します。たとえば、次のように


yepnope([{ 
    load: 'http://ajax.googleapis.com/ajax/libs/dojo/1.6.1/dojo/dojo.xd.js', 
    complete: function() { 
    if (!window.jQuery) { 
     yepnope('asset_path('you_local_copy_of_dojo') '); 
    } 
    } 
}]) 

(注:asset_pathヘルパー周りERBタグが必要になります)

ローカル道場ファイルは/ javascriptのフォルダの資産であってもよいが、アプリケーションマニフェストには含まれません。あなたは、プリコンパイル配列に道場のファイルを追加する必要があります。

config.assets.precompile += 'your_local_file.js'

そして、これはasset_pathヘルパーが利用できるようになります。

関連する問題