Rails:部分远程形式:工作一次,而不是两次

Posted

技术标签:

【中文标题】Rails:部分远程形式:工作一次,而不是两次【英文标题】:Rails: Remote Form in a Partial: works once , not twice 【发布时间】: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' 【参考方案1】:

第一次在您的页面中加载新的 javascript。所以它会起作用。 下次你的 javascript 不工作意味着你可能会在 document.ready 中添加你的脚本代码......

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

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

【讨论】:

以上是关于Rails:部分远程形式:工作一次,而不是两次的主要内容,如果未能解决你的问题,请参考以下文章

多部分消息以文本/纯文本而不是 java 中的多部分/替代形式发送

Python,Apscheduler 问题——作业运行两次而不是一次

Rails Ajax:.js.erb 呈现为文本,而不是 JS

文档准备好后通过 Ajax 加载的 Rails 远程表单未提交

可重复使用的远程模态 Rails

TabScroll 加载部分一次,然后第二次刷新,看起来部分加载了两次