window.aftersell.cart.events.
Подписка — это вызов настройки, поэтому её безопасно размещать в начале вашего скрипта, без необходимости ждать ready().
Доступные события
Подписка
events.on(event, handler) регистрирует обработчик и возвращает функцию, которая отменяет подписку:
events.once(event, handler): срабатывает один раз, затем отписывается сам.events.off(event, handler): удаляет конкретный обработчик.
Два правила
Не изменяйте корзину из cart_updated без защитного условия
cart_updated снова вызывает cart_updated. Если этот обработчик снова изменяет корзину, у вас бесконечный цикл. Покупатель наблюдает, как его корзина лихорадочно меняется, пока страница бомбардирует Shopify.
Считайте payload доступным только для чтения
registerLineTransform.
cart_loaded
cart_loaded повторно воспроизводится для поздних подписчиков. Если вы подпишетесь после того, как корзина уже загрузилась, ваш обработчик вызывается немедленно с текущей корзиной. Порядок подписки никогда не имеет значения, поэтому вам не нужно беспокоиться о том, успел ли ваш скрипт раньше корзины.
cart_updated
item_added
{ item }, где item — это позиция корзины.
cart_loaded. Добавление нескольких разных товаров сразу вызывает событие один раз на каждую позицию.
item_removed
{ item }, позиция в том виде, в каком она была непосредственно перед исчезновением, поэтому вы всё ещё можете прочитать её key, variantId и title.
item_added: уменьшение количества без достижения нуля не является удалением.
cart_opened и cart_closed
checkout
Прослушивание извне SDK
CustomEvent на window, поэтому вы можете слушать, не касаясь window.aftersell.cart. Это полезно из файла темы, стороннего приложения или скрипта, загружающегося независимо от корзины.
Обратите внимание на именование: шина использует
snake_case, DOM-события используют kebab-case с префиксом aftersell:cart:.
event.detail и соответствует объекту корзины. События отправляются на window, поэтому слушатель в любом месте страницы их получает. Корзина отрисовывается в shadow root, но граница shadow никогда не находится на пути события. Каждая отправка клонирует payload, поэтому слушатель, мутирующий event.detail, не может повлиять на других, а слушатель, выбросивший исключение, не может нарушить работу SDK.
Стандартные события корзины Shopify
document всякий раз, когда она изменяет корзину, поэтому код темы и другие приложения могут реагировать на мутации Aftersell так же, как они реагируют на мутации темы:
Каждое событие также несёт
promise, который Aftersell разрешает, когда завершается базовая запись, в соответствии со стандартом Shopify — ожидайте его, не разрешайте сами. Они отправляются на document и всплывают, поэтому слушатель на window тоже их получает.
Что дальше
- Объект корзины: полная структура payload выше.
- Действия: как изменить корзину из обработчика.
- Хуки: для изменения отрисовки корзины, а не реакции на неё.
- Сценарии использования: отслеживание аналитики, бесплатные подарки и другие полные примеры.