Хочу поделится способом, который мы используем при разработке.
Иногда для правильной работы JS требуется не только его код, но еще и файл стилей CSS, языковой файл и иногда загрузка других встроенных библиотек, все это реализует наша библиотека JS Core.
JS Core так же отслеживает зависимости от других библиотек, в случае необходимости подключая их, при этом исключая дублирование подключений.
Данный метод полностью совместим с новой функцией ядра - "Оптимизация CSS и JS" которая вышла в обновлении main 12.0.7.
Регистрация вашего скрипта в JS Core, например в include.php модуля:
CJSCore::RegisterExt('your_js', array( 'js' => '/bitrix/js/your_module/functions.js', 'css' => '/bitrix/js/your_module/css/functions.css', 'lang' => '/bitrix/modules/your_module/lang/'.LANGUAGE_ID.'/functions_js.php', 'rel' => array('popup', 'ajax', 'fx', 'ls', 'date', 'json') )); |
js - путь до вашего JS скрипта
css - путь до вашего CSS файла (не обязательный параметр)
lang - путь до вашего языкового файла с учетом языковой константы (не обязательный параметр)
rel - зависимости, здесь перечисляются какие библиотеки нужны например jquery или json, список можно посмотреть в файле /bitrix/modules/main/jscore.php (не обязательный параметр)
skip_core - если у вас нет зависимостей и bitrix core вам не нужен, смело ставьте true (не обязательный параметр)
Инициализация вашего скрипта, в компоненте:
<?CJSCore::Init(array('your_js'));?> |
Языковые файлы, составляются в привычном для битрикс-компонентов формате:
<? $MESS["YM_TEXT_1"] = "Текст 1"; $MESS["YM_TEXT_2"] = "Текст 2"; ?> |
BX.message('YM_TEXT_1'); |
Эффективной разработки!
По второму вопросу, если описывать все библиотеки и все функции - разработка встанет не на один день
Быть может вам нужен какой то практический момент, например отправка асинхронного запроса или работа с локальным хранилищем, работа с окнами?
Либа работы с окнами очень интересна, аякс тоже, но там немного попроще, не так много от него обычно требуется.
Ну или вот например - какие-нибудь валидаторы есть в фреймворке?
Вот что может заинтересовать сообщество:
core.js - главная библиотека, тут находятся общие функции
core_popup.js - последняя наша оконная библиотека, на основе её например работает мессенджер
core_ls.js - библиотека по работе с локальным хранилищем (localStorage) с поддержкой ИЕ8,9 и с учетом специфики многосайтовости и многоаккаунтности
core_fx.js - библиотека по работе с эффектами, в ней недавно добавилась одна легкая и клевая обертка с помощью которой делается анимация в админке и мессенджере
core_date.js - библитека по формированию дат - (сегодня, 12-14, вчера и тд)
core_ajax.js - библиотека по работе с асинхронными запросами
Валидаторов нет.
Если больше людей выскажутся, что им это нужно, попробую дать некоторые примеры по интересующим темам
Указывать при подключении нужно все библиотеки которые используются, если они были вызваны ранее, они не будут подключены повторно.
Обновил статью, спасибо.
Метод склеивает скрипты и стили, убирая "простыню" подключений.
все эти библиотеки ДОЛЖНЫ быть документированы, а не существовать только как отдельные инсайты-откровения разработчиков в блогах.
Но по хорошему надо реализовать схему аналогичную подключению языковых фраз в php, т.е. что бы для отсутствующих фраз в переводе всегда подгружались языковые фразы основного языка.
Добавил в план, возможно уже в следующей версии это реализуем.
Массив в JS передается по ссылке. Но я не нашел в коде библиотеки примера использования данных в массиве-параметре обработчиков. Вероятно потому, что в отличие от событий в PHP (Битрикс), здесь нельзя указать приоритетов и обработчики перед вызовом не сортируются.
Тогда как по какому-либо событию (ситуации) получить данные из внешнего кода и продолжить исполнение?
Почитал о шаблоне проектирования "прокси" для JavaScript, посмотрел код функции в \bitrix\js\main\core\core.js - не понял.