2013-01-04 20 views
1

我有一個應該改變頁面背景的jquery函數。我希望背景是app/assets/images目錄中的圖像。但是,我對使用資產管道引用圖像的正確方式感到困惑。jquery函數中的引用rails圖像

這裏是我行現在:

$('body').css("background-image", "url('welcome.png')"); 

什麼是訪問的URL參數圖片的最佳方式是什麼?

+1

有什麼不對您當前使用的方法是什麼?把相對於頁面的路徑放在圓括號之間:'url('app/assets/images/welcome.png')' –

+0

你有沒有寶石「jquery-rails」? –

回答

5

試試這個:

$('body').css("background-image", "url('/assets/welcome.png')"); 

爲了訪問在管道資產,你必須指定assets文件夾。

我一直在試圖尋找在那裏我閱讀這一點,但基本上Rails的所有資產助手的URL轉換的東西像/assets/asset.png或類似/assets/stylesheet.css所以你應該能夠只指定在源URL的assets文件夾做相同的。

+7

我認爲它不適用於生產環境! – Ludovic

+0

此解決方案已過時,我會在下面推薦@tirdadc的答案。 –

0

$('body').css("background-image", "url('/app/assets/images/welcome.png')");

假設應用程序位於文檔根目錄。

+0

當我這樣做,它只是拋出一個404. – Mason

+0

沒有你的文件結構和服務器配置是不可能的幫助抱歉:/ –

+0

我不認爲你需要指定完整的應用程序路徑。 –

6

這是覆蓋在文檔中:

http://guides.rubyonrails.org/asset_pipeline.html#coding-links-to-assets

你應該使用在「2.3.3的JavaScript/CoffeeScript的再培訓局」,描述的方法這將意味着加入.erb擴展到您的JS文件,並使用asset_path。

另一種方法那是更優雅。將您的圖像移動到一個類定義在css.scss文件,然後將你的jQuery該類:

.welcome { 
    background-image: url(image-path('welcome.png')); 
} 

,並在您的jQuery:

$('body').addClass("welcome"); 
+0

這是一個很好的答案,在javascript中修復url的值沒有問題。但是這個解決方案並不好,當我看到這個(明顯的)建議並改變了主意時,我就這樣走了。謝謝。 – 244an

0

在我看來,您需要使用.erb(嵌入式ruby)擴展來允許您的.js文件中的rails路徑助手。如果你的js文件(balabala.js例如)在資產/ javscripts /,更名爲balabala.js.erb,然後用:

$('body').css({"background-image":"<%= asset_path({'filenamehere.png') %>"});  

要求在資產/ javscripts /應用此文件。 JS

//= require balabala 

那麼它應該工作