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
In einem etwas realistischeren Fall könnte die Funktion 'showPublish' einen Datensatz mit mehreren Datenfeldern empfangen und die Daten an einen fernen Service übertragen.
Beispiel: Der folgende Handler bettet den vorherigen ein, publiziert das Ereignis und bewirkt die Anzeige der folgenden Nachricht: 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
Beachten Sie, dass die Funktion InfoBus.publish den Namen der Funktion 'showPublish' nicht enthält. Stattdessen fungiert der Infobus als Mediator und stellt sicher, dass die entsprechende Funktion aufgerufen wird.
InfoBusCallback(eventName String in, data any in)
Infobus.subscribe gibt außerdem einen Subskriptionswert (Typ ANY) zurück, mit dem Sie die Subskription des Ereignisses aufheben können.
Wenn ein Rich-UI-Handler den Infobus subskribiert, kann dieser Handler nicht aus dem Speicher entfernt werden. Beispiel: Wenn ein Schaltflächenklick des Benutzers einen Handler in einer Funktion erstellt und wenn der Handler den Infobus subskribiert, können der Handler und seine Widgets erst aus dem Speicher entfernt werden, wenn der Handler die Subskription des Infobus aufhebt.
In den meisten Fällen wird der Speicher durch den EGL-Laufzeitcode freigegeben. Im folgenden Abschnitt wird jedoch beschrieben, wie eine größere Kontrolle über die Speicherverwaltung realisiert werden kann: “Rich-UI-Speicherverwaltung”.
Ein Ereignisname besteht aus einem oder mehreren Tokens, d. h. Zeichensymbolen wie sample und test (im beschriebenen Beispiel). Jedes Token wird durch einen Punkt vom nächsten getrennt.
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 unterstützt keine Spezifikationsausdrücke in Bezug auf filter oder scope.