Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Доступ из Flex к подгруженным swf написанных на Flash/Flex (http://www.flasher.ru/forum/showthread.php?t=120005)

lumumba 09.01.2009 12:49

Доступ из Flex к подгруженным swf написанных на Flash/Flex
 
Ситуация:
Есть главное Flex приложение, которое грузит в себя swf-ки, которые могут быть и флешовыми и флексовскими.
Написан интерфейс IModule для общения с подгруженными модулями.
Во Flash интерфейс имплементируется в DocumentClass, во Flex имплементируется след. образом(вычитал из справки):
<mx:Application implements="IModule" ...

При загрузке модуля через moduleSwfLoader, при событии INIT делаю следующее:
var module:IModule = moduleSwfLoader.content as IModule;
ну и дальше идут вызовы методов...

Трабл в следующем: если swf-ка собрана на Flash, то все замечательно работает. Однако в случае с Flex swf, не срабатывает приведение типов, и module становится null-овым.

Есть идеи?

BulletStein 11.01.2009 05:09

Думаю надо указать: загружать модуль в ApplicationDomain.currentDomain.
Например, при загрузке модуля с помощью IModuleInfo это делается так.

var partModuleInfo:IModuleInfo = ModuleManager.getModule("part.swf");
partModuleInfo.load(ApplicationDomain.currentDomain);

или я просто не понял вопрос :P

lumumba 11.01.2009 09:50

прошу прощения за непонятную формулировку
я не использую Flex модули и при загрузке не использую ModuleManager
модулями я называю обычные swf, сделанные на Flash AS3, или Flex и гружу их с помощью SWFLoader

looptroop 11.01.2009 15:57

почитай про SystemManager - тебе поможет.

wvxvw 11.01.2009 23:37

Угу, Application не является документ классом флексовой SWF, так что если loadedSWF as IModule == null -> Читаем тут:
Код AS3:

/**
        *  @private
        *  If a class wants to be notified when the Application instance
        *  has been initialized, then it registers a callback here.
        *  By using a callback mechanism, we avoid adding unwanted
        *  linker dependencies on classes like HistoryManager and DragManager.
        */

        mx_internal static function registerInitCallback(initFunction:Function):void
        {
                if (!allSystemManagers || !lastSystemManager)
                {
                        return;
                }
 
                var sm:SystemManager = lastSystemManager;
 
                // If this function is called late (after we're done invoking the
                // callback functions for the last time), then just invoke
                // the callback function immediately.
                if (sm.doneExecutingInitCallbacks)
                        initFunction(sm);
                else
                        sm.initCallbackFunctions.push(initFunction);
        }

И делаем выводы :)

а так же:
Код AS3:

//----------------------------------
    //  application
    //----------------------------------
 
        /**
        *  The application parented by this SystemManager.
        *  SystemManagers create an instance of an Application
        *  even if they are loaded into another Application.
        *  Thus, this may not match mx.core.Application.application
        *  if the SWF has been loaded into another application.
        *  <p>Note that this property is not typed as mx.core.Application
        *  because of load-time performance considerations
        *  but can be coerced into an mx.core.Application.</p>
        */

        public function get application():IUIComponent
        {
                return IUIComponent(_document);
        }



Часовой пояс GMT +4, время: 03:57.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.