2010-11-28 29 views
0

對不起,我是Ruby on Rails的新手。我對這個大圖很困惑,所以你的幫助將不勝感激。如何訪問只能通過局部訪問的導軌變量?

在我的application.html.haml中,我調用了= yield,它的輸出來自ranking.html.haml。現在,後者可以訪問rails變量@featured_image。

我想要做的是在頁面加載時獲得這個欄變量@featured_image,這樣我就可以在該頁之前預先加載該圖像和圖像。

但我在window.onload =在application.html.haml()函數沒有訪問@featured_image ...

我該怎麼辦呢??

謝謝!

回答

1

正如Chris Heald指出的那樣,@featured_image變量是控制器上的一個實例變量,您可以在視圖中訪問它。從JavaScript使用它,你就基本上需要做的就是它在這樣一個腳本塊寫入到您的佈局或部分地方(這是ERB,不HAML):

<script> 
    var featured_image="<%= @featured_image %>"; 
</script> 

很明顯,你會希望在@featured_image中添加對nil值的檢查,並以適合您的應用的方式對其進行處理,或者確保其始終設置爲某些內容。克里斯的建議使用助手也是一個很好的建議,但我不確定幫助者需要爲新手做些什麼是顯而易見的。

1

如果從控制器設置了@featured_image,它將對渲染管道中的所有視圖都可見。但是,您不一定總是認爲它是可見的,但是,由於佈局可能會渲染許多頁面,所以您需要在嘗試從佈局中使用它之前檢查它是否存在。

我建議使用助手方法檢查以確保它不是零,然後寫出正確的標記。您也可以看看content_for,它可讓您標記要在佈局的其他部分渲染的標記塊。

+0

謝謝克里斯。 @featured_image是由一個控制器設置的,該控制器生成視圖:ranking.html.haml ...但是,這並沒有真正回答我如何從主應用程序訪問它的問題。我不認爲content_for適用於這種情況下,我並沒有真正渲染一個視圖...我只是想在頁面加載運行某個js函數來訪問此變量。 – mtay 2010-11-28 02:29:24