【发布时间】:2011-02-02 01:37:48
【问题描述】:
背景:(如果您很懒,但仍想帮忙,请尝试跳到下面的问题)我有一个模型节点,它与自身存在一对多关系(即树)。我想要一个用户可以使用整个树的页面。我将使用 JSON 将树作为 javascript 对象发送:
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' } %>
或者也许我可以通过遍历tree 来使用javascript 在客户端构建<a>s,这将避免上面的hackish 字符串连接?我在想类似的东西
function loadNodeIntoForm(node) {
document.getElementById('node[name]').value = node.name;
document.getElementById('node[date]').value = date.name;
//etc.
}
然后,我还将拥有 javascript,它会在编辑表单时更新 JSON 对象。
问题: 最后,如何在不使用表单的情况下使用 AJAX 来保存对象?例如,我希望用户能够在保存之前编辑多个节点,所以我不能只在表单上使用 ajax,它只会提交当前编辑的节点。是否可以简单地 POST 一个 json 对象?
【问题讨论】:
-
刚刚意识到 to_json(:include => :nodes) 只做了一层。看起来我可以手动指定更多,但我可能需要编写一个函数或部分来完成整个树?
-
我猜想写一个方法 saveNode(node) 来创建一个自定义 ajax 调用,也许使用 JQuery.ajax() 是继续问题 2 的方法?我需要担心身份验证吗?
标签: javascript ruby-on-rails ajax json