[英]Refresh Rails Partial with AJAX or JS
我在Rails应用程序上工作,我在选项卡中呈现了一些表单部分。
我希望能够提交表单,并在选项卡内刷新表单,以及更新其他表单,而无需刷新页面。
这是我的控制器tape_bulk_coc
的显示页面。 该页面的主要代码如下:
<div class="large-12 columns large-collapse" style="padding-top: 2%; padding-left: 5%; padding-right: 5%">
<div class="large-2 columns">
<ul class="tabs vertical" id="example-vert-tabs" data-tabs>
<li class="tabs-title" id="job_links"><a href="#panel1v" aria-selected="true">Job Information</a></li>
<li class="tabs-title" id="job_links"><a href="#panel2v">Lab/Insp/Clr Work</a></li>
<li class="tabs-title" id="job_links"><a href="#panel3v"><%= @tape_bulk_coc.cli_type.job_type.job_type %> Types</a></li>
<li class="tabs-title is-active" id="job_links"><a href="#panel4v">Add Samples</a></li>
<% if @tape_bulk_coc.tape_bulk_coc_samples.any? %>
<li class="tabs-title" id="job_links"><a href="#panel5v"> <%=@tape_bulk_coc.tape_bulk_coc_samples.count %> Saved Samples </a></li>
<% end %>
<li class="tabs-title" id="job_links"><a href="#panel6v">Add Spore Counts ( <%= @missing_spore_count.count %> )</a></li>
<li class="tabs-title" id="job_links"><a href="#panel7v">CoC Reports</a></li>
<li class="tabs-title"><a href="#panel8v">New Job</a></li>
<li class="tabs-title"><a href="#panel9v">All Jobs</a></li>
<li class="tabs-title"><a href="#panel10v">All Reports</a></li>
</ul>
</div>
<div class="large-10 columns">
<div class="tabs-content vertical" data-tabs-content="example-vert-tabs">
<div class="tabs-panel" id="panel1v" style="border-left: solid 1px #f2f2f2">
<%= render 'jobs/show' %>
</div>
<div class="tabs-panel" id="panel2v" style="border-left: solid 1px #f2f2f2">
<%= render 'jobs/jobtypes' %>
</div>
<div class="tabs-panel" id="panel3v" style="border-left: solid 1px #f2f2f2">
<%= render 'job_types/show' %>
</div>
<div class="tabs-panel is-active" id="panel4v" style="border-left: solid 1px #f2f2f2">
<%= render 'tape_bulk_cocs/show' %>
<hr>
<%= render 'tape_bulk_coc_samples/form' %>
</div>
<div class="tabs-panel" id="panel5v" style="border-left: solid 1px #f2f2f2">
<%= render 'tape_bulk_cocs/samples' %>
</div>
<div class="tabs-panel" id="panel6v" style="border-left: solid 1px #f2f2f2">
<%= render 'spore_type_counts/form' %>
</div>
<div class="tabs-panel" id="panel7v" style="border-left: solid 1px #f2f2f2">
<!-- render 'lead_reports/index' %> -->
</div>
<div class="tabs-panel" id="panel8v" style="border-left: solid 1px #f2f2f2">
<%= render 'jobs/form' %>
</div>
<div class="tabs-panel" id="panel9v" style="border-left: solid 1px #f2f2f2">
<%= render 'jobs/index' %>
</div>
<div class="tabs-panel" id="panel10v" style="border-left: solid 1px #f2f2f2">
<%= render 'all_reports/index' %>
</div>
</div>
</div>
页面加载/刷新时,这是设置为活动的选项卡。
当您单击“添加模具孢子计数”按钮时,将出现一个模态窗口,其中包含表格数据和提交按钮。 这将提交给控制器以获取spore_type_counts
当前,在用户在该模式内提交后,它将关闭,并且页面刷新回到“添加样品”的活动选项卡。
我想要的是没有页面刷新,并且模式关闭,只有“添加孢子计数”的内容要更新。 这意味着,如果他们将孢子计数添加到样本69-3中,则它将不再显示在该选项卡上,而仅保留其他两个样本。
更新
因此,我在这里遵循了一些说明: https : //coderwall.com/p/kqb3xq/rails-4-how-to-partials-ajax-dead-easy
我正在处理的页面是tape_bulk_coc
控制器的显示页面。
在此页面上,我正在一个选项卡中呈现spore_type_counts/form
。
简而言之, spore_type_counts/form
看起来像这样:
<div id="test">
<% if @tape_bulk_coc.tape_bulk_coc_samples.any? %>
<% @tape_bulk_coc.tape_bulk_coc_samples.each do |cur| %>
<% if !cur.spore_type_count %>
<div class="reveal" data-reveal>
<%= form_for(@spore_type_count, remote: true) do |f| %>
"code for the form"
<% end %>
</div>
<% end %>
<% end %>
<% end %>
</div>
spore_type_counts_controller.rb
def create
@spore_type_count = SporeTypeCount.new(spore_type_count_params)
respond_to do |format|
if @spore_type_count.save
format.js
end
end
end
app / views / spore_type_counts / create.js.erb
$("#test").html("<%= escape_javascript(render partial: 'spore_type_counts/form' ) %>");
当我提交表单时,所有内容都会提交并在数据库中正确更新。 响应以JS的形式出现,spore_count被正确添加到CoC中,但是模式没有关闭,页面也没有更新。
NoMethodError - undefined method tape_bulk_coc_samples' for nil:NilClass: app/views/spore_type_counts/_form.html.erb:12:
行NoMethodError - undefined method tape_bulk_coc_samples' for nil:NilClass: app/views/spore_type_counts/_form.html.erb:12:
是我现在需要的帮助。
如果我正确理解它,那么我第一次访问此页面时,我的tape_bulk_cocs_controller
正在从参数中填充@tape_bulk_coc
对象。 我在spore_type_counts/form
使用此对象,但是当它尝试调用JS函数刷新部分对象时,该对象不再存在,并且在表单中有条件的情况下遇到第一个对象时出现错误。
因此,我如何获得该对象并将其传递回局部对象以使其全部正常工作?
你错过了什么。 请在代码中添加format.js {在此处},然后在控制器文件夹(spore_type_counts yours文件夹)中添加文件actionname.js。 然后在js代码中添加一条警告行以进行测试。 请记住,如果没有format.js行,则服务器将作为HTML动作执行。 只需检查服务器端日志,如果您使用remote true,它将被正确地添加为JS操作。 希望
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.