2011-02-02 99 views
0

背景 :(如果你懶惰但仍想幫助嘗試跳過以下問題)我有一個具有一對多關係的模型節點與自己(即一棵樹)。我想有一個頁面,用戶可以使用整棵樹。我將發送樹作爲使用JSON javascript對象:一種形式,很多模型實例:JSON和AJAX(在Rails上)

tree = <%= raw @node.to_json(:include => :nodes) %> 

有與對應於節點(名稱,位置,日期等)的屬性字段的表格。我的問題是:構建此表單的最佳方法是什麼,以便我可以與上述所有節點一起工作?

我需要某種小部件來選擇節點。爲了簡單起見,讓我們說它只是一堆<a> s。

很明顯,我將需要JavaScript來填充選定節點的數據的形式。然後,如何將javascript附加到<a>元素以使用JSON數據填充表單?例如,我可以有一個遞推偏_write_node.html.erb:

<a onclick="loadNodeIntoForm("<%=str%>)">node.name</a> 
<% for i in 0..node.nodes.size %> 
    <%= render :partial => 'write_node', locals => { :node => node.nodes[i], :str => str + '.nodes[' + i.to_s + ']' } %> 
<% end %> 

,我稱之爲使用

<%= render :partial => 'write_node', locals => { :node => @node, :str => 'tree.node' } %> 

或許我可以使用JavaScript通過遍歷建立在客戶端的<a>小號tree這將避免上面的hackish字符串連接?我在想像

function loadNodeIntoForm(node) { 
    document.getElementById('node[name]').value = node.name; 
    document.getElementById('node[date]').value = date.name; 
    //etc. 
} 

然後,我還將有JavaScript,將更新窗體編輯時的JSON對象。

問題:最後,如何在不使用表單的情況下使用AJAX保存對象?例如,我希望用戶能夠在保存之前編輯多個節點,因此我不能只在表單上使用ajax,它只會提交當前編輯的節點。有沒有可能簡單地發佈json對象?

+0

剛剛意識到to_json(:include =>:nodes)只有一個級別。它看起來像我可以手動指定更多,但我可能需要編寫一個函數或部分來完成整個樹? – Saucerful 2011-02-02 01:46:39

+0

我猜想編寫一個方法saveNode(節點),創建一個自定義Ajax調用,也許使用JQuery.ajax()是繼續問題2?我需要擔心身份驗證嗎? – Saucerful 2011-02-02 01:57:36

回答

1

我採取了懶惰的路線,並跳到你的問題。 AJAX與表單沒有直接關係。你可以發佈JSON對象。使用jQuery.post