Получить идентификатор вложенного поля формы из cocoon
Я пытаюсь получить следующий результат:
<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.
1 ответ:
Да, числа автоматически генерируются Cocoon. Из функции javascript cocoon" add new":
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 (согласно документации, специальные события запускаются при добавлении/удалении).