2016-01-16 34 views
0

在我的rails控制器。我有一個哈希看起來像這樣:迭代通過從Rails的控制器JS哈希

@data = { 

term => {   
    node_id => { 
    :name, 
    :matchcode, 
    :credits, 
    :parts => [{ 
     :mp_id, 
     :matchcode, 
     :nr, 
     :selected 
    }] 

}} 

現在我想通過這個散列JS迭代得到鍵和值。 起初,我需要我嘗試的東西,如得到它的術語:

for(var s in '#{@data}') { 
    console.log(s); 
} 

但我好像我做錯了什麼這是我第一次使用的軌道..

回答

0

從服務器端傳遞數據紅寶石控制器到客戶端JavaScript代碼並不那麼簡單。首先,JavaScript不知道關於ruby變量,上面是簡單的字符串'#{data}',它自己評估。

有情侶經過這樣的數據的方法:

首先,你可以設置DOM元素服務器端的HTML屬性,然後在你的JavaScript閱讀。當傳遞一個字符串或一個數字時,這可能是最簡單的解決方案,但是當你需要將它轉換成可被javascipt理解的形式時,它非常混亂 - 轉換成JSON。儘管這樣做很簡單,但它增加了額外的複雜性,而且很髒。

第二個選項是gon寶石。它爲您提供一個可以在控制器中分配數據的對象。然後,它處理所有的轉換,你可以在你的JavaScript訪問所有數據:

# controller 
gon.my_data = {a: 1} 

#js 
gon.myData #=> {"a": 1} 

該解決方案是非常簡單的,但是它仍然感覺有點髒。

最終,最乾淨和更復雜的解決方案是使用AJAX - 您的JavaScript向您的服務器發出請求以接收數據。在許多情況下可能是一種矯枉過正的行爲。

+0

謝謝你這個有用的答案,是否有可能/建議翻譯所有js代碼haml + ruby​​只有一小部分js得到迭代槽haml? – Faculty