【问题标题】:One form, many Model instances: JSON and AJAX (on Rails)一种形式,许多模型实例:JSON 和 AJAX(在 Rails 上)
【发布时间】:2011-02-02 01:37:48
【问题描述】:

背景:(如果您很懒,但仍想帮忙,请尝试跳到下面的问题)我有一个模型节点,它与自身存在一对多关系(即树)。我想要一个用户可以使用整个树的页面。我将使用 JSON 将树作为 javascript 对象发送:

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

有一个表单,其字段对应于节点的属性(名称、位置、日期等)。我的问题是:构建此表单以便我可以使用上述所有节点的最佳方法是什么?

我需要某种小部件来选择节点。为简单起见,假设它只是一堆&lt;a&gt;s。

显然,我需要 javascript 来使用所选节点的数据填充表单。然后如何将 javascript 附加到 &lt;a&gt; 元素以使用 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 在客户端构建&lt;a&gt;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


【解决方案1】:

我采取了懒惰的路线并跳到您的问题。 AJAX 与表单没有直接关系。您可以只发布 JSON 对象。使用jQuery.post

【讨论】:

  • 请原谅这个愚蠢/漫无边际的问题。我只需要为这个项目弄清楚我的想法。感谢您的确认!
猜你喜欢
  • 2011-11-24
  • 1970-01-01
  • 2013-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-12
相关资源
最近更新 更多