|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Jul 2007
Сообщений: 80
|
как обратиться к функции во flex module
Итак я создаю флекс проект
а в нем делаю флекс модули.. Потом захожу в свой актион скрипт проект и подгружаю флекс модули из другой флешки, и пытаюсь вызвать функцию внутри них, но не могу... выдает такую ошибку: ReferenceError: Error #1069: Не удалось найти свойство init в _Login_mx_core_FlexModuleFactory; отсутствует значение по умолчанию. at Main/modLoadComplet()[D:\tananuka\GTG_4\SkyLand\src\Main.as:121] <?xml version="1.0" encoding="utf-8"?> <mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="400" height="226" backgroundColor="#9FB3BF"> <mx:Script> <![CDATA[ public function init():void { trace('INIT') } ]]> </mx:Script> </mx:Module> Последний раз редактировалось tananuka; 25.12.2009 в 20:38. |
|
|||||
Регистрация: Dec 2009
Сообщений: 25
|
проще воспользоваться флексовским классом mx.modules.ModuleLoader
ну а если не хочется, то можно посмотреть как в нем реализована загрузка модулей. Я тут выдрал пару кусков, надеюсь поможет разобраться: var factoryInfo : IFlexModuleFactory; loader.contentLoaderInfo.removeEventListener(Event.INIT, initHandler); public function initHandler(event:Event):void { factoryInfo = new FactoryInfo(); try { factoryInfo.factory = loader.content as IFlexModuleFactory; } catch(error:Error) { } if (!factoryInfo.factory) { // ..... // опускаем подробности // .... return; } loader.content.addEventListener("ready", readyHandler); loader.content.addEventListener("error", moduleErrorHandler); try { factoryInfo.applicationDomain = loader.contentLoaderInfo.applicationDomain; } catch(error:Error) { } // ..... // опускаем подробности // .... } public function readyHandler(event:Event):void { var module:DisplayObject = factoryInfo.create() as DisplayObject; // а теперь можно вызывать init() module.init(); } PS: приведенный код сам не проверял... я использую ModuleLoader |
|
|||||
Регистрация: Jul 2007
Сообщений: 80
|
подгружать получилось, но
swfLoader = new Loader(); var request:URLRequest = new URLRequest('url.swf'); swfLoader.load(request) private function modLoadComplet(_event:Event):void { var module:Object = _event.target.loader.content if (module is IFlexModuleFactory) { module.addEventListener('ready', initFlexMod); } } private function initFlexMod(_event:Event):void { var module:Object = _event.target.create() as Object; module.init(this) } после того как я подгрузил флекс модуль, его визуальные компоненты равны null если вызвать функцию initialize() в флекс модуле после загрузки, для инициализации компонентов, то выдает ошибку в моем актион скрипт проекте((( помогите... мне кажется свфки созданые в флекс и актион проектах не совместимы =( Последний раз редактировалось tananuka; 25.12.2009 в 20:13. |
|
|||||
Регистрация: Dec 2009
Сообщений: 25
|
а может стоит попробовать в модуле при инициализации сгенерировать событие. На которое подписаться в падгружающем проекте
<mx:Module initialize="init();"> <mx:Script> <![CDATA[ private function init():void { trace("INIT"); dispatchEvent(new Event("MyEvent")); } public function func() : void { trace("FUNC"); } ]]> </mx:Script> </mx:Module> > |
|
|||||
Если нужно грузить модули именно swfLoader-омБ то проще всего скормить загруженные байты классу ModuleLoader и с помощью этого скласса уже размножать и использовать загруженные модули:
var modContainer:ModuleLoader protected function onLoadComplete(event:Event):void { var swfLoader:SWFLoader = event.target as SWFLoader; if (swfLoader.content is IFlexModuleFactory && !(swfLoader.content is ISystemManager)) { modContainer = new ModuleLoader(); modContainer.addEventListener(ModuleEvent.READY,onModuleReady); modContainer.loadModule("someName",swfLoader.content.loaderInfo.bytes); } } protected function onModuleReady(e:ModuleEvent):void { var targetClass:Class = Object(modContainer.child).constructor; var duplicate:DisplayObject = new targetClass() as DisplayObject; // делайте с модулем что хотите. Он находится в duplicate; } |
Часовой пояс GMT +4, время: 00:24. |
|
« Предыдущая тема | Следующая тема » |
|
|