2009-03-05 8 views
1

Ich habe eine Flash-Anwendung (reines AS, kein Flex-Framework), die ich in eine Flex-Anwendung mit SWFLoader einbetten möchte.Einbetten mehrerer Instanzen einer Flash-Komponente in eine Flex-Anwendung

Das Einbetten einer Instanz funktioniert gut. Wenn ich jedoch versuche, mehrere Instanzen (jeweils mit einem separaten SwfLoader) einzubetten, gibt es ein merkwürdiges Verhalten, das anscheinend durch Konflikte zwischen den Klassendefinitionen der mehreren Instanzen verursacht wird. Diese Flash-Anwendung ist mit einer Vielzahl von Singleton-Klassen geschrieben, so meine Vermutung ist, dass diese Singletons sich gegenseitig übersteuern und das seltsame Verhalten verursachen.

Ich habe versucht, die Flash-Anwendung in ein Kind applicationdomain zu laden, aber das scheint auch nicht viel zu helfen. Hat jemand dieses Problem konfrontiert?

+0

Können Sie es mit zwei verschiedenen Anwendungen versuchen? Auf diese Weise können wir sicher sein, ob Ihre Singletons verantwortlich gemacht werden oder nicht? – dirkgently

+0

Wenn die beiden Anwendungen in untergeordneten Anwendungsdomänen geladen werden, kollidieren die Singletons nicht. Nur wenn sie in dieselbe Anwendungsdomäne geladen werden, kollidieren sie. Lassen Sie mich weiter untersuchen, um den Fehler zu finden. – marketer

Antwort

2

Sie möchten die SWF-Datei in eine eigene Anwendungsdomäne (kein untergeordnetes Element) laden, um eine Namensüberschneidung zu vermeiden.

Es gibt drei Arten von Anwendungsdomänen:

var swfLoader:Loader = new Loader(); 
var loaderContext:LoaderContext = new LoaderContext(); 

// child SWF adds its unique definitions to 
// parent SWF; both SWFs share the same domain 
// child SWFs definitions do not overwrite parents 
loaderContext.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain); 

// child SWF uses parent domain definitions 
// if defined there, otherwise its own 
loaderContext.applicationDomain = ApplicationDomain.currentDomain; 

// child SWF domain is completely separate and 
// each SWF uses its own definitions 
loaderContext.applicationDomain = new ApplicationDomain(); 

// Load the swf file 
swfLoader.load(new URLRequest("file.swf"), loaderContext); 

würde ich vorschlagen, die erste Methode verwenden, da es Definitionen nicht überschrieben.

Verwandte Themen