Events

Events in Theia can be confusing, hopefully we can clarify things.

Let's consider this code:

(From logger-watcher.ts)

@injectable()
export class LoggerWatcher {

    getLoggerClient(): ILoggerClient {
        const emitter = this.onLogLevelChangedEmitter
        return {
            onLogLevelChanged(event: ILogLevelChangedEvent) {
                emitter.fire(event)
            }
        }
    }

    private onLogLevelChangedEmitter = new Emitter<ILogLevelChangedEvent>();

    get onLogLevelChanged(): Event<ILogLevelChangedEvent> {
        return this.onLogLevelChangedEmitter.event;
    }
}

Let's start with:

    private onLogLevelChangedEmitter = new Emitter<ILogLevelChangedEvent>();

So first what is an Emitter?

An Emitter is an event handler container, it allows for event handlers to be registered on it and triggered with an event of type X in this case an ILogLevelChangedEvent.

So here we just create an Emitter that will have events of type ILogLevelChangedEvent;

Next we want to be able to register an event handler on this Emitter to do so we do this:

    get onLogLevelChanged(): Event<ILogLevelChangedEvent> {
        return this.onLogLevelChangedEmitter.event;
    }

What this actually returns is a function that will register an event handler. Passing it your event handler function will register it so that it's called when the event fires.

So you can call:

(From logger.ts)

 /* Update the root logger log level if it changes in the backend. */
        loggerWatcher.onLogLevelChanged(event => {
            this.id.then(id => {
                if (id === this.rootLoggerId) {
                    this._logLevel = Promise.resolve(event.newLogLevel);
                }
            });
        });

This registers the anonymous function passed as param on this emitter.

Next we will need to trigger this event handler by firing an event:

 onLogLevelChanged(event: ILogLevelChangedEvent) {
                emitter.fire(event)
            }

When calling this function, the emitter fires and all the event handlers are called.

So if you need to trigger events in theia:

  • Create an emitter
  • Register events with the emitter.event function
  • Fire events with emitter.fire(event)
Go to previous Page : Property ViewGo to next page : Frontend Application Contributions