3

我试图得到以下结果:

<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动态添加的。

4

1 回答 1

3

是的,这些数字是由 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 显式为每个动态添加的元素(根据文档,触发特殊事件添加/删除时)。

于 2013-05-01T14:00:22.153 回答