<small>Предыдущие статьи:

- ➡️ [Раздел 20. JSON-данные](/docs/20-orm-json)
- ➡️ [Раздел 21. Типы контроллеров](/docs/21-controllers)
- ➡️ [Раздел 22. Структура фронтенд части](/docs/22-layouts)
</small>
# SLOT-H: Выбор js-оболочки

В текущей реализации фронтенд часть построена на собственной оболочке над jQuery старой версии. Это осознанное решение, обусловленное архитектурными особенностями экосистемы.

**Важно**: данный выбор сложился годами. Как художник - я так вижу. Код получается почти обфусцированным и крайне минималистичным. Привыкнув, я читаю на нем и пишу быстро. Однако, это не доступно будет с нуля без попытки понять идеологию данного решения.

Потому **выбор - за вами**: попробовать изучить, либо использовать то, к чему привыкли.

---

## Почему jQuery

Вся экосистема в связке frontend/backend построена на неявной передаче подписи (sign) и её актуализации при AJAX-запросах. jQuery предоставляет стабильную основу для реализации этого механизма.

Переход на другой JS-фреймворк или нативный JS возможен, но потребует самостоятельной реализации механизма подписи на новом стеке. В текущей версии это не реализовано.

Впоследствии будет выложен отдельный JS-код, содержащий необходимые функции для поддержки работы на альтернативных JS-фреймворках.

---

## Соглашения при работе с фронтендом

При использовании текущей реализации фронтенда необходимо соблюдать следующие соглашения:

### 1. Формы

Кнопка отправки формы должна быть заменена на неактивный с точки зрения `<form>` элемент. Например, `<div>` со стилизацией под кнопку.

Обычная кнопка `<button type="submit">` не используется.

### 2. Отправка формы

Отправка формы должна происходить через метод обработки клика по элементу-заменителю с вызовом:

```javascript
$.submit($(this));
````
Этот метод автоматически:

добавляет в форму актуальную подпись (sign)

инициирует отправку данных

Если этого не сделать, при IGNORE_SIGN = false в config.php данные из формы не будут приняты бэкендом.

### 3. AJAX-запросы
Отправка AJAX-запросов должна выполняться через функции:

- api(...) - для обычных запросов

- apiFile(...) - для загрузки файлов

Эти функции автоматически подставляют актуальную подпись в запрос.

### 4. Обработка ответа
Функции api и apiFile поддерживают асинхронную работу. При использовании callback-функции для обработки ответа необходимо после распаковки ответа обновить подпись:

```javascript
var i = JSON.parse(e);
alfaFooter = i.sign;
````
Это гарантирует, что следующая подпись будет актуальной.

## Итог
Текущая реализация фронтенда основана на jQuery и требует соблюдения описанных соглашений. Это обеспечивает согласованную работу механизма подписи между фронтендом и бэкендом.

При желании перейти на другой JS-фреймворк потребуется реализовать аналогичный механизм подписи на новом стеке.

---

## Что дальше?

- ➡️ [Раздел 24. Динамическая подпись](/docs/24-security-sign)
- ➡️ [Раздел 25. Защита доступа](/docs/25-security-access)
- ➡️ [Раздел 26. Принцип локализации](/docs/26-localization-principle)
