отказ от ответственности: я не знаю, работает ли следующий подход при использовании грааля.Дайте мне знать позже.
См. лучший способ для динамических форм .Автор говорит:
Чтобы добавить LineItems, у меня есть несколько js, которые вычисляют новый индекс и добавляют его в DOM.При удалении LineItem я должен изменить нумерацию всех индексов , и это то, чего я хотел бы избежать
Так что я делаю
У меня есть переменная, котораясохраняет следующий индекс
var nextIndex = 0;
Когда страница загружена, я выполняю функцию JavaScript, которая вычисляет, сколько дочерних элементов имеет коллекция, и настраивает переменную nextIndex.Вы можете использовать JQuery или YUI, не стесняйтесь.
Статическое добавление дочернего элемента
Я создаю переменную, в которой хранится шаблон (Примечание {index} )
var child = "<div>"
+= "<div>"
+= "<label>Name</label>"
+= "<input type="text" name=\"childList[{index}].name\"/>"
+= "</div>"
+= "</div>"
Когда пользователь нажимает кнопку Добавить дочерний элемент , я заменяю {index} - с помощью регулярных выражений - на значение, сохраненное в nextIndexпеременная и увеличение на единицу.Затем я добавляю в DOM
См. Также Динамическое добавление и удаление элементов HTML с помощью Javascript
Динамическое добавление ребенка
Здесь вы можете увидеть решение Paolo Bergantino
Удалив
Но я думаю, что эта проблема возрастает при удалении.Независимо от того, сколько дочерних элементов вы удалите, не трогайте переменную nextIndex.Смотрите здесь
/**
* var nextIndex = 3;
*/
<input type="text" name="childList[0].name"/>
<input type="text" name="childList[1].name"/> // It will be removed
<input type="text" name="childList[2].name"/>
Предположим, я удалил childList 1 Что я делаю ???Должен ли я перенумеровать все индексы ???
На стороне сервера я использую AutoPopulationList.Поскольку childList 1 был удален, AutoPopulationList обрабатывает его как ноль .Так что при инициализации я делаю
List<Child> childList = new AutoPopulatingList(new ElementFactory() {
public Object createElement(int index) throws ElementInstantiationException {
/**
* remove any null value added
*/
childList.removeAll(Collections.singletonList(null));
return new Child();
}
});
Таким образом, моя коллекция содержит только два дочерних элемента (без значения NULL) и Мне не нужно перенумеровывать все индексы на стороне клиента
О добавлении / удалении вы можете увидеть эту ссылку , где я показываю сценарий, который может дать вам некоторое представление.
См. Также Плагин Grails UI