Сообщение от wrbanker
|
Структура уже есть.
|
Я не об этом. Представьте, что вам поставили задачу написать цифровой автомат, который по единому правилу обрабатывал входные данные. А чтобы такое написать, входные данные должны отвечать определенным условиям, а не быть просто "кучей", которую тоже можно назвать структурой.
Если автомат, значит данные должны иметь признаки, по которым можно будет выполнять одну и туже операцию в автомате не зависимо от того какие данные, какое их количество. Они также должны определяться оговоренному набору.
Если у вас по условию есть группа значений и плюс к ней еще некоторое значение, то само собой напрашивается группировка. Поля формы каждого вопроса анкеты должны быть группой. Каждая такая группа имеет одни и те же характеристики, по которым будет работать автомат.
Например, группируем поля в элементах fieldset. Не важно, что у вопроса анкеты может быть только одно поле, оно все равно должно быть помещено в fieldset. Это оговаривается правилом, условием автомата. В fieldset в оговоренном атрибуте, например, data-fields описаны имена полей, значения которых надо получить/проверить...
<fieldset data-fields="neme1,neme2">
Не важно что поле одно, оно все равно в этом атрибуте должно быть описано в этом атрибуте.
Автомат получает коллекцию fieldset, обходит циклом, извлекает имена полей из data-fields и получает их массив.
var fields = elm.dataset.fields.split(',');
Обходит их циклом, в котором можно узнать все о нем, и имя, и тип, и значение - form[fields[i]].name, form[fields[i]].type, ...
Но в таком подходе есть один минус - если одно правило, сложить значения полей или условия их состояния, то все будет нормально, но если для какого либо набора существуют какое либо правило, то такие правила описывать в самом автомате, это как запрограммировать ПЗУ, а затем ее стирать и перепограммировать заново.
Но можно поступить ведь иначе - data-fields, это не просто текст, а json, в котором одно свойство описывает поля, а второе объект или значение false. Если это объект, то это ссылка на функцию, в которую нужно передать значения/состояния полей, а функция вернет результат. В этом случае просто будет добавить функцию для обработки любых индивидуальных условий, а в атрибуте ссылку на нее. Сам автомат переписывать не нужно будет.
То есть структура это не просто набор вопрос/поля, а подчинена определенному конечному автомату.