2014-11-03 35 views
2

我有一個外部的javascript插件,並且有很多像這樣的代碼,其中的圖像src屬性是動態構建的。來自javascript css的rail asset-url

$prod.append("<img class='fx_shadow' id='shd_" + i + "' + src='" + folderAssets + "/shadow_fx.png' />"); 

對於rails 4.1+,我預編譯了此外部代碼提供並參考的相關圖像和資產。當然,由於使用直接的src屬性不會捕獲消解和預編譯圖像的指紋,因此圖像無法在生產中加載。

如何調用從外部的JavaScript文件而不是CSS文件asset_url方法(它輸出和摘要的正確的資產文件名)是否正確? (這個JavaScript不是一個寧靜的模板js.erb文件,而是一個包含在清單中的js文件。)

另外,有沒有一個優雅的方法來處理和重構呢?

+0

什麼是您的JavaScript文件的擴展名是.js或.js.erb? – Surya 2014-11-03 11:19:24

+0

js。我應該改變它使用js.erb? – ahnbizcad 2014-11-03 11:23:52

+1

是的,將它改爲'.js.erb'然後:'$ prod.append(「'/>」);' – Surya 2014-11-03 11:25:20

回答

3

結帳2.3.3 JavaScript/CoffeeScript and ERB。您需要將.js更改爲.js.erb擴展名,例如:javascript_filename.js.erb。然後你可以使用它像這樣:

$prod.append("<img class='fx_shadow' id='shd_" + i + "' + src='<%= asset_path('shadow_fx.png') %>' />"); 

或:

var image = $("<%= image_tag 'shadow_fx.png', :class => 'fx_shadow' %>"); 
image.attr('id', 'shd_'+i); 
$prod.append(image); 

在第二個選項,你必須做出image_tag作爲圖像元素,然後添加id屬性,因爲i是一個JavaScript變量,這就是爲什麼它必須單獨添加。

+0

我非常感謝你非常感謝你! – ahnbizcad 2014-11-03 12:11:36

3

溶液1

添加功能

function imagePath(image){ 
    return "http://" + window.location.host + "/assets/"+ image; 
} 

$prod.append("<img class='fx_shadow' id='shd_" + i + "' + src=imagePath(image) />"); 

溶液2

變化從js該文件以js.erb

$prod.append("<img class='fx_shadow' id='shd_" + i + "' + src='<%= asset_path('shadow_fx.png') %>' />");