У меня есть форма для объекта с именем Program
, которая может иметь множество ProgramDocuments
.
Пользователь может добавлять и удалять документы во встроенной форме collectionType.Я отображаю коллекцию в таблице в Twig следующим образом:
<table class="table table-program-documents" id="document-list"
data-prototype="{{ formMacros.printProgramDocuments(form.programDocuments.vars.prototype)|e }}"
data-counter="{{ form.programDocuments|length }}">
<label>Documents</label>
{% for document in form.programDocuments %}
{{ formMacros.printExistingProgramDocuments(document) }}
{% endfor %}
{% do form.programDocuments.setRendered %}
</table>
<div class="bg-white">
<button type="button" class="add-another-collection-widget btn btn-secondary btn-add-document">
add
</button>
</div>
* formMacros
просто содержит <tr>
, который включает в себя поля формы и другую информацию, которую я хочу визуализировать, икнопка для удаления строки.
Для добавления и удаления строк я использую jQuery :
$('.add-another-collection-widget').click(function (e) {
var $collectionHolder = $('#document-list');
var prototype = $collectionHolder.data('prototype');
var counter = $collectionHolder.data('counter');
var newForm = prototype;
newForm = newForm.replace(/__name__/g, counter);
// increase the index with one for the next item
$collectionHolder.data('counter', counter + 1);
$collectionHolder.append(newForm);
});
});
jQuery(document).ready(function() {
$( document ).on('click', '.remove-program-document', function (e) {
e.preventDefault();
if(confirm("Are you sure you want to delete this document?")) {
$(this).closest("tr").remove();
}
});
});
Если пользователь добавляет несколько элементов в коллекцию, решает удалить пару и добавляет несколькобольше, нет проблем.Проблема возникает, однако, если форма не действительна.Если элемент коллекции недействителен, это может быть проблемой, потому что ошибка будет отображаться рядом с соответствующим идентификатором Path
Validator calls
.Это не обязательно должен быть правильный идентификатор, потому что поля все еще имеют идентификатор, заданный моим jQuery, что также вызывает проблемы, если форма была недействительной, потому что после отправки var counter
начинается снова в (в этот момент)Количество предметов.Сами элементы (в поле name
) могут иметь идентификаторы, такие как program_programDocuments_0_name
, program_programDocuments_2_name
.В этом примере 2 поля.Но когда пользователь добавляет новый элемент, этот новый элемент также получает program_programDocuments_2_name
, потому что элемент с идентификатором 1
был удален перед отправкой, но теперь counter
говорит, что есть только 2 элемента.
Итак, мне интересно, возможно ли сбросить все входные идентификаторы для моих товаров перед отправкой, чтобы они снова были перегруппированы в 0,1,2,3 и т. Д.?Я также думал о получении переменной counter
в запрос после отправки с переменной сеанса или чем-то еще, но это все равно оставило бы у меня проблемы с проверкой: .