Skip to main content
Akcje odczytują i zmieniają koszyk. Znajdują się pod window.aftersell.cart.actions.
Akcje uruchamiaj po tym, jak koszyk jest gotowy — wewnątrz ready() lub handlera zdarzenia.
Zanim koszyk się załaduje, akcje są atrapami (stubs). Każda z nich loguje w konsoli ostrzeżenie z nazwą akcji, na przykład cart.actions.addItem() called before the cart loaded, i nic nie robi. Akcje asynchroniczne nadal zwracają rozwiązany Promise, więc łańcuch .then() działa normalnie, zamiast rzucać wyjątek; getCart() zwraca null, a formatMoney() zwraca pusty string.Nic się nie psuje, jeśli wywołasz którąś za wcześnie, ale też nic się nie dzieje. Obserwuj konsolę pod kątem tego ostrzeżenia, gdy akcja wydaje się nic nie robić.

Wszystkie akcje

Wywołanie akcji z handlera cart_updated może spowodować pętlę. Najpierw przeczytaj dwie zasady.

Drawer

open i close

Otwierają lub zamykają cart drawer. Obie są synchroniczne i nie przyjmują argumentów.

Odczyt

getCart()

Zwraca bieżący obiekt koszyka lub null, zanim się załaduje. Wynik jest kopią, więc jego modyfikacja nie zmieni prawdziwego koszyka.
Ponieważ to migawka, nie przechowuj wyniku; odczytuj go ponownie za każdym razem, gdy potrzebujesz aktualnych danych. W handlerze zdarzenia masz już świeży koszyk jako payload, więc getCart() jest tam zbędne.

formatMoney(cents)

Formatuje kwotę w jednostkach mniejszych (centach) według formatu walutowego Twojego sklepu. Każda cena w SDK jest w centach, więc w ten sposób zamieniasz ją na coś, co możesz wyświetlić.
Nadpisz format za pomocą configure({ money_format }).

Zmienianie koszyka

Akcje na pozycjach identyfikują pozycję po jej Shopify key, a nie po ID wariantu, ponieważ koszyk może zawierać ten sam wariant w kilku pozycjach z różnymi właściwościami. Odczytaj go z getCart().items[n].key.

addItem(variantId, quantity?)

Dodaje wariant do koszyka. quantity domyślnie wynosi 1. Rozwiązuje się, gdy koszyk się ustabilizuje.
Dodanie wariantu, który już jest w koszyku, zwiększa ilość tej pozycji, zamiast tworzyć drugą pozycję — o ile istniejąca pozycja nie ma właściwości pozycji (line item properties). Pozycja z właściwościami to odrębna pozycja, więc powstaje nowa.

removeItem(key)

Całkowicie usuwa pozycję.

updateItemQuantity(key, quantity)

Ustawia ilość pozycji. Przekazanie 0 usuwa pozycję.
Ten drugi przykład można bezpiecznie uruchamiać z cart_updated, ponieważ warunek > 1 jest fałszywy przy drugim przebiegu. Zobacz dwie zasady.

replaceLineVariant(key, variantId)

Zamienia wariant pozycji, zachowując jej ilość i właściwości. Przydatne dla przełącznika rozmiaru lub smaku wewnątrz koszyka.
Przy zamianie plan sprzedaży pozycji jest resetowany. Pozycja subskrypcyjna staje się zakupem jednorazowym, chyba że ponownie zastosujesz plan.
Zamiana to dodanie, po którym następuje usunięcie, a nie edycja w miejscu, więc wynikiem jest nowa pozycja: dostaje nowy key i ląduje na końcu koszyka. Odczytaj ponownie getCart() po zamianie, zamiast ponownie używać przekazanego klucza.

Odświeżanie

refresh()

Ponownie pobiera koszyk z Shopify. Użyj tego, gdy coś spoza SDK zmieniło koszyk, a drawer tego nie zauważył.
Przez większość czasu tego nie potrzebujesz, ponieważ Aftersell już nasłuchuje standardowych zdarzeń koszyka Shopify i sam pobiera dane. Sięgnij po to, gdy niestandardowa integracja je omija.

visualRefresh()

Ponownie uruchamia transformacje renderowania bez ponownego pobierania koszyka z Shopify. Rzadko go potrzebujesz: zarejestrowanie (lub wyrejestrowanie) transformacji pozycji, komparatora, wzbogacacza lub któregokolwiek z hooków subskrypcji wywołuje go za Ciebie. Tylko dwa hooki add-to-cart tego nie robią, ponieważ nie zmieniają niczego, co jest już na ekranie. Sięgnij po niego, gdy zmienia się coś, od czego transformacja zależy, ale sam koszyk nie:

Uwagi i przypadki brzegowe

  • Akcje asynchroniczne rozwiązują się, gdy zmiana się ustabilizuje. Oczekiwanie na jedną z nich pozwala sekwencjonować pracę po faktycznej aktualizacji koszyka.
  • getCart() zwraca kopię. Jej modyfikacja nie robi nic z prawdziwym koszykiem.
  • Nie ma akcji dla kodów rabatowych. Zastosowane kody można odczytać na koszyku (discountCodes, totalDiscount) i per pozycję (discountAllocations); klienci stosują je przez blok Discount code.
  • Nie ma akcji dla atrybutów koszyka ani notatek. Atrybuty można odczytać na obiekcie koszyka; klienci zapisują notatki przez blok Notes.
  • Aby ukryć pozycję zamiast ją usuwać, użyj registerLineTransform. Usunięcie zmienia sumę klienta; ukrycie nie.

Co dalej