Модуль выгрузки Flex ModuleManager - PullRequest
0 голосов
/ 11 мая 2011

Я использую ModuleManager для загрузки модуля, как этот класс:

 public class LoadModule
    {
        private static var info:IModuleInfo;
        private static var display:IVisualElement;
        private static var downloadBar:ProgressBar;
        private static var parent:Group;


        public function LoadModule()
        {

        }
        //load module
        public static function load(url:String, parent:Group, bar:Boolean = true):void {
            LoadModule.parent = parent;
            info = ModuleManager.getModule(url);
            info.addEventListener(ModuleEvent.READY, readyHandler);
            info.addEventListener(ModuleEvent.SETUP, setupHandler);
            info.addEventListener(ModuleEvent.ERROR, errorHandler);
            info.load(null, null, null, parent.moduleFactory);

        }

        //add display object
        private static function readyHandler(event:ModuleEvent):void {
            LoadModule.display = event.currentTarget.factory.create() as IVisualElement;
            parent.addElement(LoadModule.display);
        }

        private static function setupHandler(event:ModuleEvent):void {

        }
        //unload module
        public static function unload():void {
            if (LoadModule.info != null) {
                LoadModule.info.addEventListener(ModuleEvent.UNLOAD, unloadHandler);
                LoadModule.info.unload();
                if (parent.getElementIndex(LoadModule.display) != -1) {
                    parent.removeAllElements();
                    LoadModule.display = null;
                }
            }
        }

        private static function unloadHandler(event:ModuleEvent):void {
            LoadModule.info.removeEventListener(ModuleEvent.UNLOAD,unloadHandler);
            trace("unloadModue");
        }
        //
        private static function progresshandler(event:ModuleEvent):void {
            downloadBar.label = "haved" + Math.round((event.bytesLoaded /event.bytesTotal) * 100) + "%";
        }

        private static function errorHandler(event:ModuleEvent):void {
            throw Error(event.errorText);
        }

        public static function setDownloadbar(downloadBar:ProgressBar):void {
            LoadModule.downloadBar = downloadBar;
        }
    }

Затем я загружаю модуль и выгружаю модуль:

 LoadModule.unload(); // 1
   LodModule.load('..one.swf', parent);
   LoadModule.unload(); //2
   LodModule.load('...one.swf', parent);

Теоретически, это только один модуль в моем приложении, и я использую «PopUpManager», выдвигающий окно, оно должно быть одним. Но на самом деле это поп-буксировка. Я использую Flash Builder для отладки этого кода, и он не замечает, что я загружаю SWF. Я думаю, в приложении есть модуль буксировки. Итак, мне нужна помощь. Как выгрузить модуль в ModuleManager. Желаю один модуль в приложении, а не буксир. Спасибо.

1 Ответ

1 голос
/ 11 мая 2011

Если я правильно понял вопрос, похоже, у вас проблемы с выгрузкой модуля.Существует отличный ресурс Adobe , который может помочь вам решить эти проблемы.Несколько соображений:

"Если у вас есть модуль, который не выгружается, шаги для диагностики проблемы: 1) Убедитесь, что модуль загружается в дочерний домен applicationDomain (используйте параметры по умолчанию дляметод load () в большинстве случаев) 2) Используйте профилировщик, чтобы убедиться, что в модуле нет ссылок на объекты. "

Если вы ссылаетесь на какие-либо объекты в модуле, модуль не будетвыгрузить.Вы хотите убедиться, что следующие области не ссылаются на рассматриваемый модуль:

  1. Стили
  2. Ресурсы
  3. ExternalInterface.addCallback functions
  4. Таймеры и таймерные механизмы
  5. Слушатели
  6. Фокус
  7. Удаленные объекты
  8. Загруженные изображения
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...