electron - typescript ställa in funktionsmedlemmar & använda detta
Jag arbetar med en Electron-app som använder TypeScript. Min main.ts skapar ett objekt av min egen CommunicationProvider-klass. Jag skulle vilja att denna klass deklarerar flera metoder (definierade i ett gränssnitt som den implementerar) men att den faktiska implementationen av dessa metoder sätts i min main.ts. Så jag deklarerade min klass som:
export class SocketIOInterceptionProvider implements IInterceptionProvider {
// IInterfaceProvider methods
show: (x?: number, y?: number) => void;
hide: () => void;
move: (x: number, y: number) => void;
constructor(port: number = 3000) {
this.initHttpServer(port);
}
public initHttpServer(port: number): void {
this._express.get('/show', function(req, res) {
console.log('SHOW from ' + req.ip);
if (this.show) this.show();
});
}
}
och i main.ts satte jag implementationerna:
const provider: SocketIOInterceptionProvider = new
SocketIOInterceptionProvider();
provider.show = (x?: number, y?: number) => { //show electron win}
Vid körning - min funktion triggas inte eftersom 'this' är odefinierad, när jag trycker på:
if (this.show) this.show();
Hur kan jag få 'detta' underhållet? Finns det något annat rekommenderat sätt att hantera händelser från en TS-klass?
Svar #1
’this’ gick förlorad i express callback, så jag tilldelade det till en lokal variabel för användning i express callbacks:
public initHttpServer(port: number): void {
this._express = express();
this._httpServer = this._express.listen(port);
const provider=this;
this._express.get('/show', function(req, res) {
console.log('SHOW from ' + req.ip);
if (provider.show) provider.show();
});
