【问题标题】:Get nested form field id number from cocoon从 cocoon 获取嵌套的表单字段 ID 号
【发布时间】:2013-04-25 12:02:29
【问题描述】:

我正在尝试得到以下结果:

<input class="file required" id="page_media_attributes_1367414416272_image" multiple="multiple" name="page[media_attributes][1367414416272][image]" type="file">

我可以添加任何动态标签吗:

<div class='span3'> 
  <%= f.input :image, as: :file, :input_html => { :multiple => true, :name => 'page[media_attributes][Something dynamic][image]' } %>
  <%= f.input :name %>

  <%= link_to_remove_association "remove image", f %>
</div>

那会插入数字1367414416272 而不是[Something dynamic] 来获取上面的html?

数字每次都不一样,我相信是Cocoon生成的,因为这些字段是cocoon动态添加的。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 file-upload nested-forms cocoon-gem


    【解决方案1】:

    是的,这些数字是由 Cocoon 自动生成的。来自cocoon的“新增”javascript函数:

    new_id = new Date().getTime() + cocoon_element_counter++
    

    我认为您也必须使用 javascript 才能找到所有“茧”元素并解析它们的 id 属性以获取随机数,然后相应地更改它们的名称。

    草稿:

    $(document).ready(function(){
        $('input[id^="page_media_attributes_"][id$="_image"]').each(function(){
            var current = $(this);
            var rx = /page_media_attributes_(.*)_image/;
            num = rx.exec(current.attr('id'))[1];
            current.attr('name','page[media_attributes][' + num + '][image]');
        });
    });
    

    当然,这必须在每个新的动态生成的元素上执行。

    因此,如果您采用这种方式,则必须将上面的代码“功能化”并在文档加载后为您想要的每个特定选择器调用一次,然后通过 cocoon 显式地为每个动态添加的元素调用它(根据文档,特殊事件在添加/删除时触发)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多