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 関数が、複数のフィールドのあるレコードを受け取り、そのデータをリモート・サービスに転送することがあります。
例えば、以下のハンドラーは、前のハンドラーを組み込み、イベントを公開して、次のステートメントを表示させます。「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
end
InfoBus.publish 関数には、showPublish 関数の名前は含まれていないことに注意してください。これに代わり、Infobus はメディエーターとして機能し、適切な関数が確実に起動されるようにします。
InfoBusCallback(eventName String in, data any in)
Infobus.subscribe はサブスクリプション値 (ANY タイプ) も戻します。この値は、イベントをアンサブスクライブする場合に使用できます。
Rich UI ハンドラーが Infobus をサブスクライブする場合、このハンドラーはメモリーから削除できません。 例えば、ユーザーのボタン・クリックにより関数内にハンドラーが作成され、そのハンドラーが Infobus をサブスクライブする場合、ハンドラーとそのウィジェットは、ハンドラーが Infobus をアンサブスクライブするまでメモリーから削除できません。
たいていの場合、メモリーは EGL ランタイム・コードにより解放されます。 ただし、『Rich UI メモリー管理』のトピックでは、さらに高度なメモリー管理を行う方法について説明します。
イベント名は、1 つ以上のトークン (この例の sample および test などの文字記号) で構成され、それぞれは、ドットで区切られています。
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.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");
Rich UI は、フィルター またはスコープ に関連した仕様句はサポートしません。