【发布时间】:2012-09-09 13:47:03
【问题描述】:
最近几天我遇到了一个问题。 我想使用远程表单更新对象。 我第一次提交表单时基本上可以更新我的对象,但第二次就不行了。
所以,我有一个部分远程表单。
查看/任务/_table_form.haml.erb
%tr{:class => "tr_mission_#{mission.id} tr_mission"}
= form_for(mission, :url => mission_path(mission), :html => { :remote => true , :method=> :put, :format => :js, :multipart => true, :class => "my_remote_form" }) do |f|
= f.text_area :description, :size => "220x6", :class => "fill_data"
= f.submit 'Update', :class => "btn btn btn-inverse", :disable_with => "updating..."
这是我的控制器 /app/controllers/missions_controller.rb
def update
@mission = Mission.find(params[:id])
respond_to do |format|
format.html {
render :action => "edit"
}
format.js {}
end
end
这是/missions/update.js.erb:
$('.tr_mission_<%= @mission.id %>').replaceWith('<%= escape_javascript( render :partial => "table_form", :locals => {:mission => @mission}).html_safe %>');
我的对象的更新工作一次,而不是两次,在萤火虫控制台上,我可以看到我的表单类型是第一次:text/javascript,下次打开 text/html...
感谢您的帮助。
【问题讨论】:
-
我可以想象 UJS 的魔力(从数据属性创建远程功能)仅在页面第一次加载时发生,而不是在通过 ajax 再次加载表单时发生。跨度>
-
您似乎使用 js.erb o 删除了表单?
-
我使用函数 replaceWith (api.jquery.com/replaceWith) 将其替换为相同的部分。
-
伙计们,我强制我的表单采用“放置”参数,而不是帖子。我必须在我的表单中添加这一行:= hidden_field_tag '_method', 'put'
标签: javascript jquery ruby-on-rails ruby forms