window.aftersell.cart.actions.
Действия выполняются после готовности корзины, внутри
ready() или обработчика события.До загрузки корзины действия являются заглушками. Каждое из них выводит в консоль предупреждение с именем действия, например
cart.actions.addItem() called before the cart loaded, и ничего не делает. Асинхронные действия всё равно разрешают Promise, поэтому цепочка .then() выполняется нормально, а не выбрасывает исключение; getCart() возвращает null, а formatMoney() возвращает пустую строку.Ничего не ломается, если вызвать действие слишком рано, но и ничего не происходит. Следите за этим предупреждением в консоли, когда действие как будто ничего не делает.Все действия
Drawer
open и close
Чтение
getCart()
null до его загрузки. Результат является копией, поэтому его изменение не повлияет на настоящую корзину.
getCart() там избыточен.
formatMoney(cents)
configure({ money_format }).
Изменение корзины
Действия с позициями идентифицируют позицию по её Shopify
key, а не по ID варианта, потому что корзина может содержать один и тот же вариант в нескольких позициях с разными свойствами. Читайте его из getCart().items[n].key.addItem(variantId, quantity?)
quantity по умолчанию равен 1. Разрешается, когда корзина стабилизируется.
removeItem(key)
updateItemQuantity(key, quantity)
0 удаляет позицию.
cart_updated, потому что проверка > 1 даёт false при втором проходе. См. два правила.
replaceLineVariant(key, variantId)
key и оказывается в конце корзины. После этого заново прочитайте getCart() вместо повторного использования переданного вами ключа.
Обновление
refresh()
visualRefresh()
Замечания и особые случаи
- Асинхронные действия разрешаются, когда изменение стабилизируется. Ожидание одного из них позволяет выстроить последовательность работы после фактического обновления корзины.
getCart()возвращает копию. Её изменение никак не влияет на настоящую корзину.- Нет действия для промокодов. Применённые коды доступны для чтения в корзине (
discountCodes,totalDiscount) и по позициям (discountAllocations); покупатели применяют их через блок Discount code. - Нет действия для атрибутов корзины или примечаний. Атрибуты доступны для чтения в объекте корзины; покупатели пишут примечания через блок Notes.
- Чтобы скрыть позицию, а не удалить её, используйте
registerLineTransform. Удаление меняет итоговую сумму покупателя; скрытие — нет.
Что дальше
- Объект корзины: что возвращает
getCart(). - События: когда запускать эти действия.
- Хуки: измените отрисовку позиции вместо изменения корзины.
- Сценарии использования: полные решения распространённых запросов.