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. Динамическая подпись
- ➡️ Раздел 25. Защита доступа
- ➡️ Раздел 26. Принцип локализации