watchEventRegistration

[ Funktion ]

public static watchEventRegistration(
    name: string,
    callback: (data: EventProvider.IEventRegResultObject) => void
): DestroyFunction

Überwacht einen Event-Namen auf Registrierungs-Ereignisse und löst den zugehörigen Callback aus, wenn eine Registrierung stattfindet um z. B. auf event-spezifische Registrierungsoptionen (siehe register) reagieren zu können.

Parameter

Name

Typ

Beschreibung

name

string

Name des Events

callback

data: EventProvider.IEventRegResultObject) => void

Callback mit Informationen über das Event-Registrierungs-Ereignis.

Rückgabewert

Typ

Beschreibung

TcHmi.DestroyFunction

Meldet die Event-Registrierungs-Überwachung ab und gibt alle zugehörigen Resourcen frei, wenn aufgerufen.

watchEventRegistration 1:

Verfügbar ab Version 1.10

Beispiel – JavaScript 1

TcHmi.EventProvider.watchEventRegistration('MyEvent', function (data) {
    if (data.error === TcHmi.Errors.NONE) {
        switch (data.type) {
            case TcHmi.EventProvider.EventRegWatchType.REGISTER:
            {
                // Event registration
                console.log(data);
            }
            break;
            case TcHmi.EventProvider.EventRegWatchType.DESTROY:
            {
                // Event destroy
                console.log(data);
            }
            break;
        }
    }
});

var e1 = TcHmi.EventProvider.register('MyEvent', function () { }, { myOption: true });
var e2 = TcHmi.EventProvider.register('MyEvent', function () { });
e2();
e1();

Beispiel – JavaScript 2

Auszug aus der Control-Klasse TcHmi.Controls.System.TcHmiControl als Implementierungsbeispiel anhand des Events [Id].onMouseDown.

Die Klasse TcHmi.Controls.System.TcHmiControl überwacht das HMI-Event [Id].onMouseDown auf Registrierungsereignisse um dem Anwender die Möglichkeit zu bieten, pro Registrierung unterschiedliche Optionen zu verwenden.

Alle HMI-Events auf der Ebene TcHmi.Controls.System.TcHmiControl, die auf DOM-Events basieren, erlauben z.B. die DOM-Event Eigenschaften passive (boolean) und capture (boolean) bei der Registrierung zu aktivieren bzw. deaktivieren.

Über die Konstante TCHMI_EVENT_OPTION_OBJECT_SUPPORTED wird ermittelt, ob der Browser eine aktuelle addEventListener API unterstützt oder ob man auf die Option capture (boolean) beschränkt ist.

//...
function TcHmiControl(element, pcElement, attrs) {
    //...
    _this.__resourcesDomEventRegWatchOnMouseDown = {};
    //...
}

TcHmiControl.prototype.__attach = function () {
    //...
    __this.__destroyDomEventRegWatchOnMouseDown = TcHmi.EventProvider.watchEventRegistration(this.getId() + '.onMouseDown', function (data) {
        if (data.error === TcHmi.Errors.NONE) {
            switch (data.type) {
                case TcHmi.EventProvider.EventRegWatchType.REGISTER:
                    {
                        __this.__resourcesDomEventRegWatchOnMouseDown[data.event.id] = {
                            event: data.event,
                            domEventListener: {
                            eventName: 'mousedown',
                            listener: __this.__onElementMouseDown.call(__this, data.event),
                            options: TCHMI_EVENT_OPTION_OBJECT_SUPPORTED ? (
                                                        data.event.options ? data.event.options : { passive: false, capture: false }
                                                        ) : (
                                                         (data.event.options && data.event.options.capture) ? data.event.options.capture : false
                                                        )
                            }
                        };
                        var list = __this.__resourcesDomEventRegWatchOnMouseDown[data.event.id].domEventListener;
                        __this.getElement()[0].addEventListener(list.eventName, list.listener, list.options);
                    }
                    break;
                case TcHmi.EventProvider.EventRegWatchType.DESTROY:
                    {
                        var list = __this.__resourcesDomEventRegWatchOnMouseDown[data.event.id].domEventListener;
                        __this.getElement()[0].removeEventListener(list.eventName, list.listener, list.options);
                    }
                    break;
            }
        }
    });
    //...
};

TcHmiControl.prototype.__detach = function () {
    //...
    for (var key in this.__resourcesDomEventRegWatchOnMouseDown) {
        var list = this.__resourcesDomEventRegWatchOnMouseDown[key].domEventListener;
        this.__element[0].removeEventListener(list.eventName, list.listener, list.options);
    }
    //...
    if (this.__destroyDomEventRegWatchOnMouseDown) {
        this.__destroyDomEventRegWatchOnMouseDown();
        this.__destroyDomEventRegWatchOnMouseDown = null;
    }
    //...
};

TcHmiControl.prototype.__onElementMouseDown = function (event) {
    var _this = this;
    return function (e) {
        //...
        TcHmi.EventProvider.raiseEx(event, e);
        //...
    };
};
//...