typescript - Automatisk importere objekt fra foreldresklasse


Akkurat nå eksporterer jeg en "singleton" WebGL2RenderingContext som følger:

export default GLHelper.GetGLContext(UIHelper.Canvas);

Etter det bruker jeg det gjennom hele applikasjonen som:

import gl from '.';

gl.DrawElements(/*...*/);

Min prosjektstruktur har roten i en app.ts-klasse. Inne i denne klassen har jeg instanser av andre klasser, og i utgangspunktet bruker hver klasse eksporten nevnt ovenfor.

Mitt problem er at når jeg bestemmer meg for å bruke flere canvas-elementer, vil jeg ha flere WebGL2RenderingContext-objekter, og dermed vil min singleton-eksport alltid operere på samme canvas.

Den eneste løsningen for dette tilfellet jeg kan tenke meg, er å hente alle kontekstobjekter og sende dem videre som parameter gjennom hele koden. Jeg tenker på noe som dette:

const ctx1 = GLHelper.GetGLContext("id1");
const ctx2 = GLHelper.GetGLContext("id2");

const app1 = new App(ctx1);
const app2 = new App(ctx2);

I App-klassen ville jeg måtte sende objektet videre som:

class App {

    private _ctx: WebGL2RenderingContext;

    constructor (ctx: WebGL2RenderingContext) {
        this._ctx = ctx;
        // Pass down the context
        const renderingObj = new Mesh(ctx);
    }
}

Det jeg ønsker å oppnå er en enkelt eksport i App-klassen som automatisk vil bli brukt i de andre klassene bare ved å importere den. På den måten ønsker jeg at renderingObj automatisk skal bruke konteksten som ble eksportert i App-instansen den ble opprettet i. Alt dette ville være virkelig kult hvis jeg ikke måtte sende ned konteksten som parameter.

Finnes det en måte å oppnå dette på, eller kanskje løse problemet på en annen måte?

Svar #1

Umm, ikke sikker, men jeg tror du kan lage globale variabler og så bruke dem overalt du trenger.

Eksempel på å lage en global variabel.

// First declare the window global outside the class

declare let window: any;

// Inside the required class method

let globVarName = window.globVarName;

REDIGER :

Det jeg ønsker å oppnå er en enkelt eksport i App-klassen som automatisk vil bli brukt i de andre klassene bare ved å importere den.

Et alternativ er å bruke en global variabel i App-klassen for å erklære den én gang og bruke den overalt, i stedet for å sende konteksten som parameter individuelt i hvert tilfelle.

Relaterte artikler