上一篇:Theia APIs——Preferences
事件
Theia中的事件或許會讓你感到困惑,希望本節能闡述清楚, 來看下面的代碼:(來自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; }}
先來看看這一行:
private onLogLevelChangedEmitter = new Emitter<ILogLevelChangedEvent>(); 首先,什么是Emitter? Emitter是事件處理程式的容器,可以在上面注冊事件處理程式并使用型別為X的事件觸發它,在上面的例子中,X的型別為ILogLevelChangedEvent, 所以這里我們創建了一個Emitter,它將包含所有型別為ILogLevelChangedEvent的事件, 接下來,我們希望能夠在這個Emitter上注冊一個事件處理程式,可以像這樣:get onLogLevelChanged(): Event<ILogLevelChangedEvent> { return this.onLogLevelChangedEmitter.event; }它實際回傳的是一個函式,用來注冊事件處理程式,你只需要將事件處理程式的函式傳遞給它,它將注冊該事件,然后當事件觸發的時候該處理程式會被呼叫, 你可以這樣呼叫:(來自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); } }); });這將在emitter上注冊一個匿名函式,并將其作為引數進行傳遞, 接下來,我們需要觸發一個事件來執行該事件處理程式,
onLogLevelChanged(event: ILogLevelChangedEvent) { emitter.fire(event) } 當呼叫該函式時,emitter觸發并呼叫所有的事件處理程式, 所以,如果你想在Theia中觸發事件,需要:- 創建一個emitter
- 使用emitter.event函式注冊事件
- 使用emitter.fire(event)函式觸發事件
原文地址:https://theia-ide.org/docs/events
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/6682.html
標籤:其他
