2009-03-05 3 views
1

У меня есть флэш-приложение (чистая AS, без флеш-фреймворка), которую я бы хотел встроить в приложение flex с помощью SWFLoader.Внедрение нескольких экземпляров Flash-компонента в приложении Flex

Внедрение одного экземпляра хорошо работает. Однако, когда я пытаюсь внедрить несколько экземпляров (каждый с отдельным SwfLoader), действительно существует странное поведение, которое, по-видимому, вызвано столкновениями между определениями классов для нескольких экземпляров. Это флеш-приложение написано с большим количеством одноэлементных классов, поэтому я предполагаю, что эти синглтоны переопределяют друг друга и вызывают странное поведение.

Я попытался загрузить приложение Flash в дочернее приложение домена, но это тоже не помогает. Кто-нибудь сталкивался с этой проблемой?

+0

Можете ли вы попробовать с двумя различными приложениями? Таким образом, мы можем быть уверены, что виноват ваш синглтон или нет? – dirkgently

+0

Когда два приложения загружаются в дочерние области приложений, синглтоны не сталкиваются. Это происходит только тогда, когда они загружаются в тот же домен приложения, с которым они сталкиваются. Позвольте мне исследовать дальше, чтобы найти ошибку. – marketer

ответ

2

Вы хотите загрузить SWF в свой собственный домен приложения (а не дочерний), чтобы избежать столкновения имен.

Есть три типа областей применения:

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); 

Я предложил бы использовать первый метод, так как он не будет перезаписывать определения.