
Все формы, которые имеются во всплывающих окнах, должны отправляться асинхронно, то есть без перезагрузки страницы.
Для обработки таких форм создан класс AsyncForm (файл public/js/ui/forms/AsyncForm.js).
Форма размечена в HTML следующим образом (пример):
<form class="form" id="new-account-form">
<div class="form-group">
<input type="text" class="form-control" placeholder="Название" name="name" required>
</div>
</form>
Состоит из 4 частей:
Важные детали:
Прикрпеляет к форме следующий обработчик:
Запрещает странице перезагружаться при попытке успешной отправки.
При успешной отправке вызывает метод submit
Получает данные из формы и преобразует в объект:
То есть для формы:
<form id="myform">
<input type="hidden" name="hello" value="kitty">
<input type="hidden" name="city" value="New York">
</form>
const form = document.getElementById( 'myform' ),
asyncForm = new AsyncForm( form );
console.log( asyncForm.getData());
результат будет:
{
"hello": "kitty",
"city": "New York"
}
Пустой метод. Пригодится для дальнейших форм, что будут унаследованы от AsyncForm. Например, в формах:
Получает данные формы из метода getData и передаёт в метод onSubmit:
{
"результат работы метода getData()"
}
То есть для примера:
<form id="myform">
<input type="hidden" name="hello" value="kitty">
<input type="hidden" name="city" value="New York">
</form>
class MyForm extends AsyncForm {
onSubmit( data ) {
console.log( data ); // выведет данные, которые передаст onsubmit
}
}
const form = document.getElementById( 'myform' ),
asyncForm = new MyForm( form );
asyncForm.submit();
/*
Метод вызовет onSubmit, который выдаст такие данные
{
hello: 'kitty',
city: 'New York'
}
*/