register
[ Funktion ]
static register(
name: string,
callback: (e: EventProvider.Event, ...data: any[]) => void,
options?: object
): TcHmi.DestroyFunction;
Registriert einen Callback zu einem Event und liefert eine Funktion zum Abmelden des Events zurück.
Wird ein Event nicht mehr benötigt sollte es abgemeldet werden um Speicherlecks (mem leaks) zu vermeiden.
Das System bietet zwei Möglichkeiten zum Abmelden:
- Rückgabewert des Register-Aufrufs: Hierzu wird der Rückgabewert gespeichert und beispielsweise im destroy eines Controls aufgerufen.
- Erster Parameter im callback. Soll beispielsweise ein Callback nur einmal aufgerufen werden, so kann innerhalb des callbacks die Registrierung beendet werden.
Beide Möglichkeiten werden im unten angegebenen Beispiel benutzt.
Parameter
Name | Typ | Beschreibung |
---|---|---|
name | Name des Events | |
callback | (e: EventProvider.Event, ...data: any[]) => void; | Callback Funktion welche bei diesen Ereignissen aufgerufen werden soll. Diese Funktion erhält ein Event-Objekt und optional weitere Parameter. Nicht jedes Event liefert diese mit. |
options [ Optional ] Verfügbar ab Version 1.10 | object | JSON-Objekt mit Einstellungswerten. |
Rückgabewert
Typ | Beschreibung |
---|---|
Meldet das Event ab und gibt alle zugehörigen Ressourcen frei wenn aufgerufen. |
![]() | Verfügbar ab Version 1.8 |
Beispiel - JavaScript
var destroyEvent = TcHmi.EventProvider.register(
'TcHmiButton.onPressed',
function (evt, data) {
// Do stuff
console.log(evt);
if(data){
// some events have custom data
console.log(data);
}
// …
// Destroy to free event resources if event is no longer needed.
evt.destroy();
}
);
var timeoutID = setTimeout(function () {
// Remove register after 5 seconds as an example
destroyEvent();
}, 5000);
Beispiel – TypeScript
Innerhalb des Callbacks kann auch auf den Eventnamen zugegriffen und angepasst reagiert werden:
// get somehow the control instances of the controls
const controlA = TcHmi.Controls.get('ControlNameA')!;
const controlB = TcHmi.Controls.get('ControlNameB')!;
const genericHandler: Parameters<typeof TcHmi.EventProvider.register>[1] = (event, data) => {
const ctrlName = event.name.split('.')[0]; // event.name is '<controlname>.onPressed'
if (ctrlName === 'ControlA') {
// do smart things with Control A
TcHmi.Log.infoEx(controlA.getId() + ' clicked' );
} else if (ctrlName === 'ControlB') {
// do smart things with Control B
TcHmi.Log.infoEx(controlB.getId() + ' clicked');
}
};
const destroyRegPressedA = TcHmi.EventProvider.register(controlA.getId() + '.onPressed', genericHandler);
const destroyRegPressedB =TcHmi.EventProvider.register(controlB.getId() + '.onPressed', genericHandler);
// both destroyRegPressed destroy callbacks should be called at the correct time to prevent memleaks.
// if register was done in __attach destroy it in __detach
// if register was done before __attach destroy it in __destroy