Функциональность и динамика клиента описывается несколькими уровнями JS.
Ниже приведен список уровней в порядке их инициализации.
Загружаются только те библиотеки, файлы сервисных функций, классы и контроллеры, которые задействованны на конкретной странице. Это же относится к вызову функций и методов js (например, нельзя инициализировать карты, обработчики и т.п. там, где их нет)
Native js применяется для описания функций, объектов, массивов, отбработки циклов и кейсов.
jQuery применяется для доступа и управления элементами DOM, отправки ajax запросов, запуска тригеров и перехвата событий. Применение native js для данных целей не допускатеся.
js Twitter Bootstrap - применяется для реализации динамики стандартных объектов. Не допускается применение native js, jQuery и других библиотек для описания динамики, которая уже предусмотрена в Bootstrap.
Для всех случаев, не предусмотренных Native js, jQuery, Twitter Bootstrap допускается использование дополнительных библиотек. Все библиотеки должны загружаться локально (без ссылок на сторонние ресурсы)
Если библиотека не предполагает локальное хранение данных, она должна подгружаться асинхронно.
В случа работы с формами и данными пользователей обязательна валидация данных на стороне клиента. Валидация производится по нескольким признакам:
В тех случаях, когда практика user experience предполагает ввод данных в разных форматах (даты, адреса, телефоны и т.д.) используются:
Доступ к объектам DOM допускается только через атрибуты вида js-{object}="{specification}"
, где
{object}
- смысловое наименование (например “js-callback” - для формы обратной связи)
{specification}
- уточняющее определение для дочерних элементов (например “name” - для инпута, в котором указывается имя)
В указанном выше примере DOM может выглядеть следующим образом:
<form js-callback="form">
<input type="text" js-form-input="name"/>
<input type="tel" js-form-input="phone"/>
</form>
Доступ к объектам DOM через id, классы и прочие атрибуты не допускатеся.
Не допускается инициализация интерактива с объектам DOM через определение событий/функций в html разметке.
Например, недопустима подобная реализация событий: <button onclick=someFunction()></button>
.
Любые реакции объектов DOM должны определяться через события, которые: