我想获得以下结果:
<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动态添加的。
答案 0 :(得分:2)
是的,这些数字是由Cocoon自动生成的。来自cocoon的“添加新”javascript函数:
new_id = new Date().getTime() + cocoon_element_counter++
我认为您必须使用javascript才能找到所有“cocoon”元素并解析其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显式地为每个动态添加的元素调用(根据文档,特殊在添加/删除时触发事件。