添加嵌套字段后如何获得正确数量的元素?

时间:2015-01-15 22:23:19

标签: jquery ruby-on-rails cocoon-gem

我正在使用Cocoon gem在Rails 4中的表单中创建嵌套对象。 点击"添加嵌套元素",$(' .js_slider')。如果在click()函数内调用,则length返回n-1而不是n。

partial _nested_element_fields.html.slim

 .nested-fields
        = f.input :name
        = f.input :description
        = f.hidden_field :importance, :class => "js_importance_input"
        .js_slider
        = link_to_remove_association "Remove nested", f

查看form.slim.html

= f.simple_fields_for :nested_elements do |f|
  .factors_container
    = render :partial => "nested_fields", :locals => {:f => f}
   .links
      = link_to_add_association "Add Nested", f, :nested_elements, :class => "js_add_nested_elements"

javascript slider.js

$(document).ready(function(){
    $('.add_fields').click(function(){
        console.log($('.js_slider').length);
    });
});

等待执行click函数然后获取正确数量的.js_slider元素的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

Cocoon提供了几个您可以订阅的JS事件:

  • cocoon:before-insert:在插入新的嵌套子项之前调用
  • cocoon:after-insert:插入后调用
  • cocoon:before-remove:在删除嵌套子项之前调用
  • cocoon:after-remove:删除后调用

您可能需要cocoon:after-insert

 $('#surrounding_element').on('cocoon:after-insert', function(e, insertedItem) {
    console.log($('.js_slider').length);
 });

请参阅自述文件Callbacks (upon insert and remove of items)的部分。