背景 :(如果你懶惰但仍想幫助嘗試跳過以下問題)我有一個具有一對多關係的模型節點與自己(即一棵樹)。我想有一個頁面,用戶可以使用整棵樹。我將發送樹作爲使用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對象?
剛剛意識到to_json(:include =>:nodes)只有一個級別。它看起來像我可以手動指定更多,但我可能需要編寫一個函數或部分來完成整個樹? – Saucerful 2011-02-02 01:46:39
我猜想編寫一個方法saveNode(節點),創建一個自定義Ajax調用,也許使用JQuery.ajax()是繼續問題2?我需要擔心身份驗證嗎? – Saucerful 2011-02-02 01:57:36