javascript - 如何在 Rails 3 中定位嵌套的表单元素

标签 javascript ruby-on-rails nested-attributes

我正在创建一个 Rails 3 应用程序,它使用具有两级嵌套属性的嵌套表单,即

<%= form_for @workareas do |f| %>
   <%= f.text_field :workarea_name %>
   <%= f.fields_for :projects  do |project| %>
      <%= f.text_field :project_name %>
      <%= f.fields_for :tasks  do |task| %>
         <%= f.text_field :task_name %>   
         <%= f.check_box :complete %>
         <%= f.check_box :urgent %>
         <%= f.check_box :today %>
      <% end %>
   <% end %>
<% end %>

(我意识到这个伪代码不是 100% 有效的)

我正在使用 cocoon 来处理嵌套表单。我之前使用的是 Ryan 的 nested_forms,但由于 Coccon 似乎能够更好地处理这个问题而进行了切换。

我想在表格中显示任务,例如:

<table class="tasks">
  <tr>
    <th><%= f.label :task_name %></th>
    <th><%= f.label :complete %></th>
    <th><%= f.label :urgent %></th>
    <th><%= f.label :today %></th>
  </tr>
  <%= f.fields_for :tasks do |task| %>  
    <tr>
       <td><%= f.text_field :task_name %></td>
       <td><%= f.check_box :complete %></td>
       <td><%= f.check_box :urgent %></td>
       <td><%= f.check_box :today %></td>
    </tr>
  <% end %>
</table>
<%= link_to_add_association "New Task", f, :tasks %>

我在将新任务插入布局中的正确位置时遇到问题。这是因为会有多个任务表, View 上每个项目下都有一个。

我意识到我可以使用脚本来指定添加字段的位置:

$(function() {
    $("a.add_fields.").
      data("association-insertion-position", 'after').
      data("association-insertion-node", '.tasks tr:last');
});

但无法弄清楚如何传递任务属于哪个项目。例如,如果我有两个项目,并尝试将任务添加到第二个项目,则当前正在将这些字段添加到第一个项目。 (它们在保存时与项目 2 正确关联,但这纯粹是布局问题)。

有没有人遇到过这个问题?是否有更好的选择器用于“关联插入节点”。我欢迎任何指示或建议。

谢谢!!

更新

我还没有设法找到解决这个问题的办法。本质上我想要做的是添加嵌套的子元素,包含在 <tr> 中。 block ,到父窗体。我无法按照我希望/期望的方式完成这项工作。

作为临时解决方案,我现在在 <li> 中渲染子元素堵塞。 <li> block 包含一个完整的 <table><tbody><tr>为每个 child 积木。这在格式方面不太理想,但这是我能想到的最好的。

我打算让这个问题悬而未决,至少暂时如此,希望有人能提供更好的解决方案。

感谢到目前为止所有回复的人。

最佳答案

我不知道你的表格是如何显示的,我的 JS 也有点生疏,但你可以像这样在 link_to 中传递一个数据属性:

<%= link_to_add_association "New Task", f, :tasks, 'data-project_id' => "project_#{project.id}" %>

然后在你的函数中:

var project_id = $(this).data("project_id");
$("#" + project_id + " a.add_fields.").

在 CodeSchool.com 上有一个很好的教程,他们使用 jQuery Air:Captain's Log

关于javascript - 如何在 Rails 3 中定位嵌套的表单元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9346456/

相关文章:

ruby-on-rails - 在 Rails 2.3 上安装咖啡师/ CoffeeScript

ruby-on-rails - Rails - 是否可以在模型中为其嵌套属性设置快捷方式?

ruby-on-rails - 我应该如何将 rails 和 simple_form 用于嵌套资源?

ruby-on-rails - 复数 for fields_for has_many 关联未显示在 View 中

ruby-on-rails - decent_exposure 每次创建双条目

javascript - 打印时删除表格边框线

javascript - 为什么在 while 循环内等待 setInterval Promise 会导致调用量堆积?

javascript - js 上的 Ace 模板错误,函数 ace.general_things

ruby-on-rails - RSpec 中的 stub_model 和 mock_model 有什么区别?

javascript - 使用返回 Promise 的函数来 Promise 所有内容