BX.addCustomEvent
Описание
Функция BX.addCustomEvent
Функция подразумевает два варианта входных параметров.
void BX.addCustomEvent( Object eventObject, string eventName, Function eventHandler );
void BX.addCustomEvent( string eventName, Function eventHandler );
Функция назначает обработчик eventHandler кастомному событию с именем eventName, возникающем в объекте eventObject. Если eventObject не указан (короткий вызов), то обработчик будет вызываться при каждом вызове события с таким именем в любом объекте.
Получение списка всех событий в системе
При работе с кастомными событиями возникает резонный вопрос - как получить полный список событий, который присутствует в системе (актуально для готовых шаблонов, административной части, и Битрикс24-коробки) ?
Данную задачу можно решить следующим образом - в файле /bitrix/js/main/core/core.js
находим:
BX.onCustomEvent(eventObject, eventName, arEventParams, secureParams);
Вставим в его исполнение логирование:
console.log(eventName, arEventParams);
После этого при совершении различных действий на клиенте (клики, push-информации, открытии popup) в лог будут писаться коды событий. Вам останется подобрать нужное.
Примеры использования
Как добавить свои шрифты в визуальный редактор
На событии GetFontFamilyList добавить нужные шрифты в массив. Тогда они начнут выводиться в списке шрифтов в редакторе.
BX.addCustomEvent('GetFontFamilyList', BX.delegate(function (fontlist) { fontlist.push({value: 'RobotoThin', name: 'RobotoThin'}); fontlist.push({value: 'RobotoLight', name: 'RobotoLight'}); fontlist.push({value: 'RobotoRegular', name: 'RobotoRegular'}); fontlist.push({value: 'RobotoBlack', name: 'RobotoBlack'}); for(var key in userFonts) { fontList.push({value: userFonts[key], name: userFonts[key]}) } }));
Как зафиксировать обновление счетчика
Для этого нужно добавить обработчик события:
BX.addCustomEvent("onPullEvent-main", BX.delegate(function(command,params){ if (command == 'user_counter' && params[BX.message('SITE_ID')] && params[BX.message('SITE_ID')]['__НАЗВАНИЕ_ВАШЕГО_СЧЕТЧИКА__']) { // вызвать код для обновления счетчика // в params[BX.message('SITE_ID')]['__НАЗВАНИЕ_ВАШЕГО_СЧЕТЧИКА__'] будет новое значение счетчика } }, this));
Для мобильной версии:
BX.addCustomEvent("onPull-main", BX.delegate(function(data){ if (data.command == 'user_counter' && data.params[BX.message('SITE_ID')] && data.params[BX.message('SITE_ID')]['__НАЗВАНИЕ_ВАШЕГО_СЧЕТЧИКА__']) { // вызвать код для обновления счетчика // в data.params[BX.message('SITE_ID')]['__НАЗВАНИЕ_ВАШЕГО_СЧЕТЧИКА__'] будет новое значение счетчика } }, this));
Работа с модулем Push and Pull
Ловушка для страниц десктопной версии (все события кроме событий online):
BX.addCustomEvent("onPullEvent-moduleName", BX.delegate(function(command,params){ console.log('Events of moduleName', command, params); }, this));
Ловушка для страниц мобильной версии (все события кроме событий online):
BX.addCustomEvent("onPull-moduleName", BX.delegate(function(data){ console.log('Events of moduleName', data.command, data.params); }, this));
Пример кода для работы с PHP классами модуля (Pull, Pull Shared, Pull Watch):
BX.addCustomEvent("onPullEvent-main", function(module_id,command,params) { if (command == 'check') { console.log('Command from module MAIN - its work!'); } });
В примере иы подписываемся на событие получение команд (onPullEvent-moduleName), moduleName это название вашего модуля, например main, в функции получаем command, params которые мы указали при отправке команды из PHP, обрабатываем свои команды с учетом вашей логики.
Если ваша логика требует сбора всех событий, то формат немного отличается: (доступно на любой версии pull)
Ловушка для страниц десктопной версии (все события кроме событий online):
BX.addCustomEvent("onPullEvent", BX.delegate(function(module_id,command,params){ console.log(module_id, command, params); }, this));
Ловушка для страниц мобильной версии (все события кроме событий online):
BX.addCustomEvent("onPull", BX.delegate(function(data){ console.log(data.module_id, data.command, data.params); }, this));
Пример кода для работы с PHP классами модуля (Pull, Pull Shared, Pull Watch):
BX.addCustomEvent("onPullEvent", function(module_id,command,params) { if (module_id == "test" && command == 'check') { console.log('Work!'); } });
В примере мы подписываемся на событие получение команд (onPullEvent), в функции получаем module_id, command, params которые мы указали при отправке команды из PHP, обрабатываем свои команды с учетом вашей логики.
- Для получения данных об онлайне используйте событие [link=888232]onPullOnlineEvent[/link]
- Лучше использовать обработчики событий для конкретных модулей, вместо обработчика на все события. Такой формат будет более производителен.
Сообщение не промодерировано, возможны ошибки и неточности.
|
Отличная статья как отловить эти кастомные события
|
Сообщение не промодерировано, возможны ошибки и неточности.
|
||
Получение списка всех событий в системе
+- тут bitrix/js/main/core/core.js:11569
| ||
Сообщение не промодерировано, возможны ошибки и неточности.
|
||||
bitrix/js/main/core/core.js
| ||||
Алексей Попович
|
||
Если на одной странице с оформлением заказа лежит также и компонент корзины, в обработчиках sale.order.ajax можно добавить код изменения корзины:
| ||
Алексей Попович
|
||
пример события для шаблона drag_n_drop компонента bitrix:main.file.input - событие успешной загрузки файла:
| ||
Олег Орестов
|
||
Приведу пример решения очень простой задачи, которая была еще до появления этой страницы документации.
На страницы оформления заказа (компонент sale.order.ajax) использовались не стандартные внешне элементы чекбокс и радио. Внешний вид задавался с помощью jquery.uniform плагина. При первом просмотре страницы все было отлично, но как только мы получаем ее заново на ajax, то внешний вид элементов сбрасывался. Решается так:
| ||
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.