4.2.2.10. ガジェット間通信¶
intra-mart Accel Kaiden! ではガジェットごとに通信を行う機構を用意してます。本項では、このガジェット間通信に関して解説します。
4.2.2.10.1. ガジェット間通信のイメージ¶
ガジェット間といっても、ガジェット同士で通信を行うわけではなく、javascriptAPIのGadgetManagerを仲介させて通信を行います。こうすることで、ガジェット間の依存性をなくすことができるメリットがあります。
ガジェットAから発行されたイベントは、GadgetManagerからガジェットBやガジェットCにイベントが伝搬されます。ただしそのイベントを処理するかどうかはそのガジェットに任されます。たとえば、上図ではガジェットBはイベントを処理する用意があるので、そのままガジェットBでは処理を実行します。ガジェットCはイベントを処理する用意がないため、発行されたイベントは無視されます。(エラーにもなりません)
4.2.2.10.2. ガジェット間通信のイベント処理¶
4.2.2.10.2.1. イベントの種類¶
ガジェット間通信では2つのイベントの種類があります。
pushイベント他のガジェットに何かを通知したり、依頼したりするためのイベントです pullイベント他のガジェットに何かデータなどを要求するイベントです。イベントを処理するガジェットは値などを返却する必要があります。上記のようにイベントの種類が分かれていますが、内部的に厳密な違いはありません。pushイベントでも戻り値を返却することができます。コラム
pushイベントの戻り値はtrue/falseなどイベントの成否のみを返却し、pullイベントはデータを返却するように切り分けることを推奨します。
4.2.2.10.2.2. イベントの発行¶
他のガジェットへイベントを発行するには、KAIDEN.gadgetMan.execPush()もしくは、KAIDEN.gadgetMan.execPull()を利用します。
//pushイベントを発行 KAIDEN.gadgetMan.execPush("pushイベントキー", "引数", "呼び出し元ガジェットID"); //pullイベントを発行 var ret = KAIDEN.gadgetMan.execPull("pullイベントキー", "引数", "呼び出し元ガジェットID");
4.2.2.10.2.3. イベントの受信¶
他のガジェットからのイベントを受信するためには、ガジェットからEventManagerを取り出して、registPushListener()もしくはregistPullListener()にてイベントリスナを登録します。発行時に指定された引数がそのままイベントリスナに渡されます。var eventMan = KAIDEN.getGadget("ガジェットID").eventManager; //pushイベントの受信 eventMan.registPushListener("pushイベントキー", function(arg) { //イベント処理 }); //pullイベントの受信 eventMan.registPullListener("pullイベントキー", function(arg) { //イベント処理 return "戻り値"; });
4.2.2.10.2.4. イベントの戻り値¶
他のガジェットへイベントを発行した場合、複数のガジェットが処理をして値を返却する可能性があります。そのため、発行したイベントの戻り値は必ず配列になります。配列内には、処理自体の戻り値とは別に、担当したガジェットの情報なども返却されます。//pushイベントを発行 KAIDEN.gadgetMan.execPush("pushイベントキー", "引数", "呼び出し元ガジェットID"); //pullイベントを発行 var ret = KAIDEN.gadgetMan.execPull("pullイベントキー", "引数", "呼び出し元ガジェットID");
- 上記の場合、retには以下の情報が配列で格納されています。
- result ※処理自体の戻り値が格納されています。
- gadgetAttr.gadgetId
- gadgetAttr.gadgetClass
- gadgetAttr.gadgetVariation
- gadgetAttr.gadgetInstance
コラム
ガジェット間通信のイベント内容は、 クライアントサイド JSPの構成とガジェット間通信 を参照してください。