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.
