Javascript Rails:局部远程表单:只工作一次,而不是两次

Javascript Rails:局部远程表单:只工作一次,而不是两次,javascript,jquery,ruby-on-rails,ruby,forms,Javascript,Jquery,Ruby On Rails,Ruby,Forms,这几天我遇到了一个问题。 我想使用远程窗体更新对象。 当我第一次提交表单时,我基本上可以更新我的对象,但是第二次就不行了 所以,我有一个局部的远程表单 视图/任务/_表_form.haml.erb %tr{:class => "tr_mission_#{mission.id} tr_mission"} = form_for(mission, :url => mission_path(mission), :html => { :remote => true , :met

这几天我遇到了一个问题。 我想使用远程窗体更新对象。 当我第一次提交表单时,我基本上可以更新我的对象,但是第二次就不行了

所以,我有一个局部的远程表单

视图/任务/_表_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  %>');
$('.tr_mission').replacetwith(''table_form',:locals=>{:mission=>@mission}).html_safe%>');
在firebug控制台上,我的对象的更新只工作一次,而不是两次,我可以看到我的表单的类型是第一次:text/javascript,下一次它打开text/html


感谢您的帮助。

这是javascript第一次新加载到您的页面中。所以它会起作用。 下次javascript不工作时,意味着您可能会将脚本代码添加到文档中。准备好了

对于此问题,您有两种解决方案:

  • 您需要在每次更新时再次调用javascript文件
  • 在特定的javascript函数中指定更新调用,并且必须在页面中的每次更新激发时调用该javascript函数

  • 我可以想象UJS魔术(从数据属性创建远程功能)只在第一次加载页面时发生,而不是在通过ajax再次加载表单时发生。你似乎用js.erb o删除了表单?我使用函数replaceWith()将其替换为相同的部分。伙计们,我强制我的表单采用“put”参数,而不是post。我必须在我的表单中添加这一行:=隐藏的\u字段\u标记'\u方法','put'