Хуки JavaScript: события и колбэки
События
Общая информация
События в новой версии служат заменой хукам и колбекам.
Событие объявляется так:
$.ceEvent('trigger', 'ce.event_name', [a, b,c]);
Где:
- ce.event_name — название события, обязательно с префиксом
ce
(CS-Cart event) - [a, b, c] — массив параметров, которые будут переданы обработчикам события
Обработчик объявляется так:
$.ceEvent('on', 'ce.event_name', function(a, b,c) { //... });
- ce.event_name — название события, обязательно с префиксом
Если заменить on на one, то обработчик выполнится только 1 раз и после этого удалится.
Обработчиков может быть несколько, выполняются они в порядке, в котором были объявлены. Обработчик может вернуть false - в этом случае последующие обработчики не будут выполнены.
Событиями будут являться любые действия пользователя – это и ввод данных с клавиатуры, и передвижения мышки, и конечно же клики – всё это и есть события. К событиям можно еще отнести события создаваемые скриптами и триггерами.
Например если вам необходимо показать alert после ajax запроса то легче всего это будет сделать подписавшись на событие.
$.ceEvent('on', 'ce.ajaxdone', function(event) { alert('Ajax done'); });
Если вам требуется подписаться лишь на 1 событие. То есть не выполнять код при каждом ajax запросе, а только выполнить его единожды для этого следует использовать событие one
$.ceEvent('one', 'ce.ajaxdone', function(event) { alert('Ajax done'); });
События по умолчанию
switch
'ce.switch_[ELM_ID]', [flag]
Запускается при скрытии/раскрытии элемента с помощью микроформата cm-combination
- flag — флаг состояния элемента (открыт/скрыт)
- [ELM_ID] — идентификатор элемента (html свойство id)
picker_js_action
'ce.picker_js_action_[ELM_ID]', [elm]
Запускается при выборе элемента в ajax_select_object.tpl
formpre
'ce.formpre_[FORM_NAME]', [form, clicked_elm]
Запускается при отправке формы, перед проверкой элементов.
- form — объект, указывающий на форму, которая отправляется
- clicked_elm — объект, указывающий на элемент, который вызвал отправку формы
- [FORM_NAME] — имя формы
formpost
'ce.formpost_[FORM_NAME]', [form, clicked_elm]
Запускается при отправке формы, после проверки элементов.
- form — объект, указывающий на форму, которая отправляется
- clicked_elm — объект, указывающий на элемент, который вызвал отправку формы
- [FORM_NAME] — имя формы
formajaxpost
'ce.formajaxpost_[FORM_NAME]', [response_data, params, response_text]
Запускается после отправке формы аяксом.
- response_data — данные ответа
- params — параметры запроса
- response_text — plain-text данные ответа
ajaxdone
'ce.ajaxdone', [elms, inline_scripts, params, data, response.text]
Запускается после выполнения ajax-запроса, после загрузки всех внешних скриптов
- elms — коллекция элементов, которые были обновлены запросом
- inline_scripts — массив inline-скриптов, пришедших в ответе
- params — параметры запроса
- data — данные ответа
- response.text — plain-text данные ответа
full_page_load
'ce.full_page_load', [response_data]
Запускается после выполнения ajax-запроса, когда была отрендерена страница полностью (например, переход по ссылке в режиме виджета)
- response_data — данные ответа
Добавить своё событие
Событие объявляется так:
$.ceEvent('trigger', 'ce.event_name', [a, b,c]);
Где:
- ce.event_name — название события, обязательно с префиксом
ce
(CS-Cart event) - [a, b, c] — массив параметров, которые будут переданы обработчикам события
Обработчик объявляется так:
$.ceEvent('on', 'ce.event_name', function(a, b,c) {
//...
});
Пример запуска после аякс-запроса:
$.ceAjax('request', 'http://site.com', {
callback: 'ce.some_event'
});
Колбэки
Раньше колбеки для некоторых действий (ajax-запрос, вызванный DOM-элементом, отображение/скрытие элемента через cm-combination) задавались достаточно “магично”. В элемент добавлялся параметр name, например name=”some_action”. При выполнении действия, например ajax-запроса, искалась функция fn_some_action и передавалась в качестве колбека при вызове запроса.
Теперь, событие объявляется через аттрибут data-ca-event элемента, например “ce.ajax_callback”. После выполнения запроса запускается соответствующее событие.
Замечание: в $.ceAjax осталась возможность передавать в параметре callback функцию. Если в этом параметре передана строка, она интерпретируется как название события.