<script> タグなしのプレーンな JavaScript を記述します。On cart update には初期テンプレートを復元する Reset to default アクションがありますが、Initialization にはないため、削除する前に自分でコピーを保管しておいてください。
かつてマーチャントがスクリプトで実現していたことの多くは、現在では組み込みの設定になっています。まずスクリプトを書く前にを確認してください。設定はカートの再設計後も機能し続けますが、スクリプトはそうとは限りません。
どちらのスロットを使うか
Initialization
window.aftersell.cart として利用できます。
ここで行うセットアップの呼び出し(configure(...)、events.on(...)、hooks.*)は、カートの起動が完了する前でもスクリプトの冒頭で安全に呼び出せます。バッファリングされ、起動後に適用されます。カートを読み取ったり変更したりするアクション(addItem や getCart など)は、ready() またはイベントハンドラの中で実行してください。
このスロットには最初、コメントアウトされた 3 つの例(追加のたびにドロワーを開く、cart_loaded に反応する、無料ギフトのラインを非表示にする)が入っているため、手を加えていない Initialization スクリプトは何もしません。試すにはいずれかのコメントを解除するか、置き換えてください。
このスロットに自然な形は、イベントを介さない一度きりの登録です。動作を一度登録すれば、以降はカートがそれを適用し続けます。合計金額を変えずに無料ギフトのラインをドロワーから非表示にするのが、同梱されているその例です:
registerLineTransform はレンダリング時にすべてのラインに対して実行され、setHidden は表示のみに作用するため、ラインはカートに残り合計金額にも計上されたまま、ドロワーに表示されなくなるだけです。変換でできることの詳細は、カートラインの非表示とラベル変更を参照してください。
カートを読み取るアクションは ready() の中に置きます:
shadowRoot が必要です。カートは shadow root の中でレンダリングされるため、document.querySelector ではドロワー内の要素は見つかりません。
On cart update
cart_updated の購読を囲むロックされたラッパーになっており、編集できるのは本体だけで、コードは更新後の cart を受け取ります。
このスロットは、カートの変更ごとに再評価が必要なルールのためのものです。無料ギフトのしきい値が典型的なケースです($75 の購入で無料のトートバッグを進呈)。答えは現在の内容次第で、内容が変わったことを教えてくれるものは他にないためです:
カートを望ましい状態に保つ
if (shouldHaveGift === hasGift) return; の行で、この考え方はカートを望ましい状態に保つあらゆるスクリプトに一般化できます。このスロットはカートの変更に反応すると同時に変更を引き起こすため、addItem や removeItem を呼ぶたびに再入します。望む状態を記述し、現在の状態と比較して、すでに一致していれば早期リターンすることで、ハンドラはループせずに 1 回のパスで収束します。避けるべきガードなしのバージョンと、ペイロードが読み取り専用である理由については、2 つのルールを参照してください。
動作の遅いストアでは、モジュールレベルの実行中フラグも保持しておく価値があります。これにより、2 つの連続した変更が、最初の追加が完了する前にどちらも追加を開始してしまうことを防げます。
cart_updated は初回読み込み後の変更でのみ発火するため(イベントのタイミング)、このスロットのスクリプトは、ページ読み込み時点ですでに条件を満たしているカートを調整しません。両方に対応するバージョンにするには、Initialization スロットから同じ関数で cart_loaded と cart_updated を購読してください。しきい値で無料ギフトを自動追加するを参照してください。スクリプトが壊れたとき
configure、events.on、hooks.register* は登録されません。コードは正しく見えるのに「ハンドラが発火しない」場合の典型的な原因がこれです。
カートはブラウザのコンソールで失敗した行を示し、各スロットは独自のファイル名(aftersell-cart-init.js と aftersell-cart-cart-update.js)で実行されるため、DevTools の Sources パネルからどちらも開いてブレークポイントを設定できます。具体的なメッセージや、コンソールに出ないフックの失敗を捕捉するデバッグチャンネルについては、デバッグを参照してください。
cart_loaded は遅れて購読した場合も再送されるため、登録の順序は問題になりません。最も安全な構成は、まずすべてを登録し、リスクのある処理はハンドラの中で行うことです。ハンドラ内での throw はそのハンドラに隔離されます。