Rich UI Infobus
- ハンドラーは、指定された名前のイベントをサブスクライブします。ハンドラーは、サブスクリプション時点で、イベントが発生したときにデータを受け取る関数の参照も行います。その後、Infobus はその関数を登録して、適当な時点で起動できるようにします。例えば、以下の Rich UI ハンドラー・パーツで sample.test という名前のイベントをサブスクライブし、組み込むハンドラーが使用できるラベル (表示域) を提供します。
Handler embeddedHandler Type RUIHandler {onConstructionFunction=start} feedback TextLabel; function start() InfoBus.subscribe("com.mycompany.sample.test", showPublish); end function showPublish(eventName STRING in, data ANY in) feedback.text = "The " + eventName + " event occurred and passed " + data; end endより現実的なケースとして、showPublish 関数が、複数のフィールドのあるレコードを受け取り、そのデータをリモート・サービスに転送することがあります。
- 同一 Rich UI アプリケーションの同じまたは別のハンドラーが、イベント名となんらかのイベント固有のデータを指定して、イベントを公開します。公開時点で、Infobus は、関数にイベント固有のデータを渡して、サブスクリプション時点に指定された関数を起動します。
例えば、以下のハンドラーは、前のハンドラーを組み込み、イベントを公開して、次のステートメントを表示させます。「sample.text イベントが発生し、サービスに入力データを渡しました (The sample.text event occurred and passed input data for a service)」
Handler InfoBusTest Type RUIHandler { initialUI = [myButton, myDiv] } myButton Button{text = "Publish the event", onClick ::= clickHandler}; myDiv Div { children = [new embeddedHandler{}.feedback] }; function clickHandler(e Event in) InfoBus.publish("com.mycompany.sample.test", "input data for a service"); end endInfoBus.publish 関数には、showPublish 関数の名前は含まれていないことに注意してください。これに代わり、Infobus はメディエーターとして機能し、適切な関数が確実に起動されるようにします。
Infobus 関数
- Infobus.subscribe。イベント名と、イベントが公開されるときに Infobus が起動する関数に対する参照の、2 つの引数を受け入れます。イベント名には、後述するように、ワイルドカード文字を含むことができます。起動される関数をコーディングする必要があります。この関数は次の Delegate パーツをベースとします。Delegate パーツで、関数は、イベントを公開するときに提供するどのタイプのデータでも受け入れできることを示します。
InfoBusCallback(eventName String in, data any in)Infobus.subscribe はサブスクリプション値 (ANY タイプ) も戻します。この値は、イベントをアンサブスクライブする場合に使用できます。
- Infobus.unsubscribe。Infobus.subscribe から戻される ANY タイプの値である、1 つのパラメーターを受け入れます。この関数には、戻り値はありません。
- Infobus.publish。イベント名と提供したデータの 2 つの引数を受け入れます。この関数には、戻り値はありません。
Rich UI ハンドラーが Infobus をサブスクライブする場合、このハンドラーはメモリーから削除できません。 例えば、ユーザーのボタン・クリックにより関数内にハンドラーが作成され、そのハンドラーが Infobus をサブスクライブする場合、ハンドラーとそのウィジェットは、ハンドラーが Infobus をアンサブスクライブするまでメモリーから削除できません。
たいていの場合、メモリーは EGL ランタイム・コードにより解放されます。 ただし、『Rich UI メモリー管理』のトピックでは、さらに高度なメモリー管理を行う方法について説明します。
イベント名とワイルドカード
イベント名は、1 つ以上のトークン (この例の sample および test などの文字記号) で構成され、それぞれは、ドットで区切られています。
- トークンの代わりにアスタリスク (*) を使用すると、アスタリスクの代わりに指定するトークンに関係なく、イベント名に一致する名前のイベントをコードで公開するときに、Infobus.subscribe によって登録された関数が起動されます。例えば、Infobus.subscribe がイベント名を com.mycompany.update.*.new.employee と識別すると、Infobus.subscribe によって登録された関数が、以下のすべての呼び出しに応答して起動されます。
InfoBus.publish("com.mycompany.update.sales.new.employee", "some data"); InfoBus.publish("com.mycompany.update.marketing.new.employee", "some data"); InfoBus.publish("com.mycompany.update.outreach.new.employee", "some data"); - 最後のトークンの代わりに二重アスタリスク (**) を使用すると、アスタリスクの代わりに指定する一連の トークン (および挿入ドット) に関係なく、イベント名に一致する名前のイベントをコードで公開するときに、Infobus.subscribe によって登録された関数が起動されます。例えば、Infobus.subscribe がイベント名を com.mycompany.update.sales.** と識別すると、Infobus.subscribe によって登録された関数が、以下のすべての呼び出しに応答して起動されます。
InfoBus.publish("com.mycompany.update.sales.new.employee", "some data"); InfoBus.publish("com.mycompany.update.sales.temporary.employee", "some data"); InfoBus.publish("com.mycompany.update.sales.outreach.new.temporary.employee", "some data");
追加の詳細情報
- OpenAjax 協力会社の Web サイトにアクセスします。
- 「Wikis」>「Member Wiki」をクリックします。
- 「Search」フィールドに文字列「OpenAjax Hub 1.0 Specification PublishSubscribe」と入力します。
Rich UI は、フィルター またはスコープ に関連した仕様句はサポートしません。