window.aftersell.cart.actions の下にあります。
アクションは、
ready() の中またはイベントハンドラの中で、カートの準備が整ってから実行してください。カートの読み込み前、アクションはスタブです。 それぞれがアクション名を含むコンソール警告(例:
cart.actions.addItem() called before the cart loaded)を出力し、何もしません。非同期アクションは Promise を解決するため、.then() チェーンは例外を投げずに通常どおり実行されます。getCart() は null を返し、formatMoney() は空文字列を返します。早く呼びすぎても何も壊れませんが、何も起こりません。アクションが何もしていないように見えるときは、コンソールでその警告を確認してください。すべてのアクション
ドロワー
open と close
読み取り
getCart()
null を返します。結果はコピーなので、書き換えても実際のカートは変わりません。
getCart() を呼ぶ必要はありません。
formatMoney(cents)
configure({ money_format }) で上書きできます。
カートの変更
アイテム系のアクションは、バリアント ID ではなく Shopify の
key でラインを識別します。カートは同じバリアントを異なるプロパティで複数のラインに保持できるためです。getCart().items[n].key から読み取ってください。addItem(variantId, quantity?)
quantity のデフォルトは 1 です。カートが確定した時点で解決されます。
removeItem(key)
updateItemQuantity(key, quantity)
0 を渡すとラインが削除されます。
> 1 のチェックが false になるため、cart_updated から実行しても安全です。2 つのルールを参照してください。
replaceLineVariant(key, variantId)
key が付与され、カートの末尾に配置されます。渡した key を再利用するのではなく、その後で getCart() を読み直してください。
リフレッシュ
refresh()
visualRefresh()
注意点とエッジケース
- 非同期アクションは変更が確定した時点で解決されます。 await すれば、カートが実際に更新された後に処理を続けられます。
getCart()はコピーを返します。 書き換えても実際のカートには何も起こりません。- ディスカウントコード用のアクションはありません。 適用されたコードはカート(
discountCodes、totalDiscount)とラインごと(discountAllocations)に読み取れます。買い物客は Discount code ブロックからコードを適用します。 - カート属性やメモ用のアクションはありません。 属性はカートオブジェクトから読み取れます。買い物客は Notes ブロックからメモを書き込みます。
- ラインを削除せずに非表示にするには、
registerLineTransformを使ってください。削除は買い物客の合計金額を変えますが、非表示は変えません。