TL; DR
我試圖在客戶端使用HTML5數據元素動態生成資產URL。這意味着資產名稱在瀏覽器運行時纔可用,這樣可以防止ERB在服務器上進行預處理。Rails 3.1資產管道中的客戶端動態資產URL
處理這種情況是否存在變通或最佳做法?
背景
我使用Fusion Charts圖表插件在Rails應用程序,它使用不同的SWF文件來生成圖表。我正在將應用程序升級到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插件,拉動這些數據屬性和電線的東西到Fusion Charts:
// ... 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
變通
最簡單的變通(我使用的是目前的一個)是簡單地移動SWF文件放回/public/fusion_charts
而不用擔心管道的資產指紋識別的複雜性。這就是說,我是新來的管道,所以也許我錯過了一些明顯的東西。
有沒有更好的方式來處理這樣的客戶端資產URL?