目标
我有一个包含项目列表的页面,来自 Rails 后端。我希望能够通过 Rails UJS 使用 Ajax 调用来编辑该列表中的一行。
方法
我在每一行的末尾添加了一个编辑按钮。编辑按钮是一个
link_to ... :remote => true
。单击它会再次加载列表,但所选行处于编辑模式。可编辑行嵌入在form ... :remote => true
. 该行中的保存按钮是一个submit
按钮。
index.html.haml
#editor
%table
- @items.each do |item|
%tr
= render :partial => 'row', :locals => { :item => item }
_row.html.haml
...
%td // a number of columns with attributes
...
%td
= link_to t("actions.edit"), edit_item_path(item), :remote => true
= link_to t("actions.delete"), item_path(item), :remote => true, :method => :delete, :data => { :confirm => "Are you sure?" }
编辑.html.haml
#editor
%table
- @items.each do |item|
%tr
- if item == @item
= form_for @item, :url => item_path(@item), :remote => true, do |f|
= render :partial => "row_form", :locals => { :f => f }
- else
= render :partial => 'row', :locals => { :item => item }
_row_form.html.haml
...
%td // a number of columns with editable attributes
...
%td
%button{ :type => "submit" }=t("actions.save")
= link_to t("actions.cancel"), items_path, :remote => true
Ajax 响应处理
$("#editor").on("ajax:success", function(event, data, status, xhr) {
$("#editor").html($(data).find("#editor").html());
});
问题
当我在编辑模式下加载列表页面时/items/12/edit
,第 12 项的行是可编辑的。单击保存按钮通过 Ajax 正确提交表单并加载/items
索引部分,用 jQuery 替换可编辑列表。再次单击编辑按钮,再次加载编辑页面(例如/items/12/edit
),并带有嵌入的表单。只有这一次,单击保存按钮时表单不再提交。似乎提交事件处理程序未附加到动态加载的远程表单。
问题
如何提交通过 Ajax 加载的远程表单,最好使用 Rails UJS 方法?
重复
我知道这个问题有重复,但没有一个得到回答。我希望有人最终能给出一个明确的答案。