Получить идентификатор вложенного поля формы из 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 3

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 (согласно документации, специальные события запускаются при добавлении/удалении).