0

我在使用 jQuery remove() 函数从表单中删除某些字段时遇到了一些问题。在视图中我有一个表格。此表单有一组用于某些子元素的循环字段。用户可以删除每组。我在我的控制器中使用远程调用destroy方法,该方法调用带有jquery的js文件,该文件将淡出并删除相关字段集所在的div。

我的问题是,尽管对象被破坏并且 div 很好地淡出,但字段仍然处于活动状态,因此在发布表单时显然会出错。

我试图添加一个字段集标记并将其删除除了 div 之外,还尝试禁用整个字段集,但结果是一样的。这些字段仍在发布中(并且由于对象已被销毁,因此返回错误)。

这是视图的相关部分

- i = 0             # a bit crude, see if can make index count more Railsy
= f.simple_fields_for :fund_levels do |fl|
   %div{id: "flheader-#{fl.object.id}"}
     %div
       = link_to "Sponsor levels", "#", :class => "show_hide", :id => "initiator1_fl#{i}", :style=>"margin-bottom:2px;", :onclick=>"return false"
     %div{:class => "slidingDiv #{fund_levels_last?(i, @fund_level_count) ? "shown": "hidd" } whitebg leftadj", :id=>"body_fl#{i}", :style=>"width:100%;" }
       = fl.input :title
       = fl.input :description
       = fl.input :maxnumber
       = fl.input :price
       %div{:style => "float: right; padding: 20px 20px 20px 0"}
         = fund_levels_last?(i, @fund_level_count) ? ( link_to "add new level", ad, {class: 'button orange sm'} ) : ( link_to "remove", accounts_ad_fund_level_path(ad, fl.object.id), {:class => 'button orange sm', :method => :delete, :remote => true, :confirm => t('q.are_you_sure')} )
       - i += 1

这是 jQuery 调用

$('#flheader-<%= @fundlevel.id %>').fadeOut(300, function() { $(this).remove(); });

正如我所说,对象被成功销毁并且 div 淡出。我只需要弄清楚在发布时如何从页面中完全删除已删除的对象(字段集)。

编辑:问题似乎是 simple_fields_for 在每个循环开始时立即生成一个隐藏的 ID 字段。这意味着 ID 字段实际上在被销毁的 div 之外,因此正在发布。关于如何强制隐藏 id 字段位于 DIV 内的任何想法?

4

1 回答 1

0

好的,经过几个小时的研究,我解决了这个问题。

首先 - 为了避免在循环 div 之外打印对象 ID,有必要手动将对象 ID 作为隐藏字段包含在内。完成后,simple_forms 不会自动包含它,因此您可以将其放置在您想要的位置。

此外,有必要对主表单控制器进行更改,以允许_destroy 和 reject_if values.all 为空。

于 2012-10-29T03:05:02.897 回答