CXAオブサーブルサービス
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
CXAObservableサービスは、レンダリングが通信し つつも緩やかに結合され、独立し、他のレンダリングに気づかないために必要なサポートを提供します。基本的な概念はObserver設計パターンに似ていますが、状態を変えるObservableオブジェクトではなく、Observableを通じてイベントをトリガーできる個別のレンダリングであり、他のレンダリングがそれを受信しています。レンダリングはイベントをサブスクライブし、そのイベントが別のレンダリングによって送信されると、加入者はCXAObservableを通じてそのイベントを通知されます。
内部的には、CXAObservableサービスはCustomObservableの実装を使って観測可能なインスタンスを用いて購読・送信します。より複雑なシナリオをサポートするために、この実装をRxJs Subjectなど他の実装に置き換えることができます。
レンダリング間の通信はレンダリング初期化時に管理されます。例えば、すべてのレンダリングが初期化される前にイベントが発生した場合(CXAApplication.IsInitialized = false)、初期化中にイベントが発生した場合、すべてのレンダリングが初期化されるまでそのイベントはキューに保持されます。キュー内のイベントは順番に発生します。これにより、他のレンダリングでイベントが発生した後にイベントにサブスクライブするレンダリングなど、サブスクライバーによる見逃しのイベントを防ぐのに役立ちます。

CXAObservableサービスは以下の手法を実行します。 CXACartContextとやり取りし、さまざまな 共有イベントを利用します。
- 方法
- イベントのサブスクライブ。使用されるメッセージパラメータは、 emitEvent 関数が呼び出された際に何が渡されるかに依存します。リスナーはイベント引数で呼び出されます。イベントに対して出力されるオブジェクトの種類に基づいて引数を処理します。このメソッドはサブスクライバーを返します。
- イベントをエミットする。これは文字列や任意の種類のオブジェクトで構いません。ベストプラクティスは、すべてのリスナーが処理できる一貫した型を持つことです。
- 製品にサブスクライブ、メソッドを実行します。リスナーは2つの引数で呼び出されます。
- 製品イベントのサブスクライブ。リスナーはイベント引数で呼び出されます。
- イベントの購読解除。
SXA Storefrontは以下の共有イベントを使用しています。
- イベント
- CXAEvent.ClearMessage表示されたメッセージを削除するためにメッセージ概要レンダリングを要求します。
- CXAEvent.SendMessage: メッセージ要約レンダリングにメッセージを表示するよう要求します。イベント引数 enum
{ type: CXAMessageType, message: String }
- CXAEvent.CartUpdated: は最新のカートが受信されたときにイベントを発します。このイベントは、コンテキストで受信されたオブジェクトがCartJsonResult型の場合、CXACartContextによって発行されます。
- CXAEvent.SetPrice: は、現在の製品バリアントまたは製品バンドル選択の価格を表示するようProduct Priceレンダリングに要求します。イベントの引数:
{ productId: String, listPrice: Number, adjustedPrice: Number, isOnSale: Boolean, savingsMessage: String }
- CXAEvent.SelectedProduct: は製品バリアントを選択するとイベントを発します。
Event argument: { CurrentCatalogName: String, CurrentProductId: String, CurrentVariantId: String }
- CXAEvent.SelectedBundleProduct: はプロダクトバンドルを選択するとイベントを発します。イベントの引数:
{ bundleSelection: BundleSelection }
- CXAEvent.SelectedProductValid: は現在の製品選択が有効であることを示すイベントを発し、Add to CartレンダリングでAdd to Cartボタンを有効にすることができます。
- CXAEvent.SelectedProductInvalid: は現在の製品選択が有効であることを示すイベントを発し、カートに追加のレンダリングでカートに追加ボタンを無効化できます。
- CXAEvent.BundleStockStatusValidは現在のバンドル選択の在庫状況が有効であることを示すイベントを発行し、プロダクトバンドルはバンドル選択の価格を要求できます。イベントの引数:
{ productId: String }
- CXAEvent.GetStockInfo: Product Inventoryレンダリングは、APIエンドポイントCatalog/GetCurrentProductStockInfo.Eventの引数から応答が受信されるとこのイベントを発生させます:
{ productId: String, stockInfos: Array }
- CXAEvent.DiscountApplied: CXACartContextサービスはAPIエンドポイント Cart/ApplyDiscountに呼び出した後にイベントを発します。
- CXAEvent.DiscountRemoved: CXACartContextサービスはAPIエンドポイント Cart/RemoveDiscountに呼び出した後にイベントを発します。