TL; DR
私はクライアント側で、動的にHTML5のデータ要素を使用して、資産URLを生成しようとしています。つまり、ブラウザでランタイムまでアセット名を使用できないため、ERBがサーバー上で前処理されません。クライアント側の動的資産のURL
このような状況を処理するための回避策またはベストプラクティスはありますか?
背景
私はチャートを生成するために、様々なSWFファイルを使用してRailsアプリケーションにFusion Chartsチャート作成プラグインを使用しています。私はアプリケーションをRails 3.1にアップグレードし、これらのSWFファイルを/vendor/assets/javascripts/fusion_charts
に入れています。
アプリケーションの中で、私は動的にそうように、HTML5のデータ属性を使用して描画するグラフの種類を指定します。
<%# ... metric.html.erb ... %>
<div id='chart-container' class='fusion-chart'
data-chart-type='MSLine'
data-source-url="<%= @metric.data_url %>">
それから私は、これらのデータ属性とワイヤ物事を引くのCoffeeScriptで書かれたシンプルなjQueryプラグインを持っていますフュージョンチャートへ:
// ... charting_plugin.js.coffee ...
chart = new FusionCharts
swfUrl: "/assets/fusion_charts/#{data.chartType}.swf"
chart.setJSONUrl data.sourceUrl
chart.render containerId
私はに実行している問題はswfUrl
引数です。 RoR Asset Pipeline guideのガイダンスに従うには、ERBでasset_path
ヘルパーを使用する必要がありますが、実行時にdata.chartType
がクライアントにバインドされており、サーバー側で事前処理できないため、これは機能しません。
<# ... charting_plugin.js.coffee.erb: This won't work; data.chartType isn't defined ... %>
chart = new FusionCharts
swfUrl: "<%= asset_path "fusion_charts/#{data.chartType}.swf" %>"
chart.setJSONUrl data.sourceUrl
chart.render containerId
作業策
最も簡単な回避策(私は現在使用している1)が、単純に/public/fusion_charts
に戻すSWFファイルを移動し、パイプラインの資産フィンガープリントの複雑さを心配しないことです。それは、私はパイプラインに新しいので、おそらく私は何かが明らかに欠けていると言いました。
このようなクライアントサイドのアセットURLを処理するより良い方法はありますか?