Модуль загрузки с индикатором выполнения - PullRequest
0 голосов
/ 16 августа 2011

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

<local:moduleloader url="Module1.swf" id="modulel" />
<local:moduleloader url="Module2.swf" id="module2" />

Затем при загрузке каждого модуля я показываю индикатор выполнения.Индикатор выполнения показывает, но не исчезает.Остается выше всего фрейма приложения.Загрузчик модулей выглядит следующим образом:

(также обратите внимание, что в Flex 3 то же самое работает, но я использую Flex 4, а в Fx 4 - нет)

<mx:ModuleLoader    xmlns:fx="http://ns.adobe.com/mxml/2009" 
                    xmlns:s="library://ns.adobe.com/flex/spark" 
                    xmlns:mx="library://ns.adobe.com/flex/mx"  
                    xmlns="*" 
                    creationComplete="initTheModuleLoader()">
    <fx:Script>
        <![CDATA[
            import mx.core.Application;
            import mx.core.FlexGlobals;    

            private var ParentApp:* = FlexGlobals.topLevelApplication;
            private var standin:DisplayObject;

            private function initTheModuleLoader():void {
                addEventListener("loading", onLoading);
                addEventListener("progress", onProgress);
                addEventListener("setup", onSetup);
                addEventListener("ready", onReady);
                addEventListener("error", onError);
                standin = panel;
            }

            private function onUrlChanged(event:Event):void {
                if (url == null) {
                    if (contains(standin))
                        removeChild(standin);
                } else {
                    if (!contains(standin))
                        addChild(standin);
                }
                progress.indeterminate=true;
            }

            import mx.controls.Alert;
            private function onLoading(event:Event):void {
                //progress.label=languageXml.lastResult.progress.progressonLoading +' ' + url;//Loading module
                progress.label = "Loading module"  + ' ' + url;//Loading module
                if (!contains(standin))
                    addChild(standin);
                progress.indeterminate=true;
            }

            private function onProgress(event:Event):void {           
                //progress.label=languageXml.lastResult.progress.progressonProgress;            //Loaded %3%%...
                progress.label = "Loaded %3%%...";          //Loaded %3%%...
                progress.indeterminate=false;
            }

            private function onSetup(event:Event):void {
                //progress.label=String(languageXml.lastResult.progress.progressonSetup).replace('###',url)
                progress.label = "on SetUp"; 
                progress.indeterminate=false;
            }

            private function onReady(event:Event):void {
                //progress.label= String(languageXml.lastResult.progress.progressonReady).replace('###',url);
                progress.label = "onReady";
                if (contains(standin))
                    removeChild(standin);
            }

            private function onError(event:Event):void {
                //progress.label=languageXml.lastResult.progress.progressonError + " " + url;
                progress.label = "Error";
            }

            private function onUnload(event:Event):void {
                if (url == null) {
                    if (contains(standin))
                        removeChild(standin);
                } else {
                    if (!contains(standin))
                        addChild(standin);
                }
                progress.indeterminate=true;
                progress.label="Module " + url + " was unloaded!";
            }   
        ]]>

    </fx:Script>

    <mx:Panel id="panel" width="100%"  borderStyle="none" >
        <mx:ProgressBar width="100%" id="progress"  source="{this}" />
    </mx:Panel>

</mx:ModuleLoader>

Кто-нибудь может помочь сэто?

Ответы [ 2 ]

0 голосов
/ 17 августа 2011

Я понял.

Во-первых, во Flex 3 помещение функции InitModuleLoader в creationComplete работает, но во Flex 4 этот метод должен быть указан в initialize.

Во-вторых, во Flex 4 не отображается (во Flex 3), поэтому я заменил mx: Panel на mx: HBox или s: Group

Вот и все, и все работает.

Но, как J_A_X предложил выше, лучше использовать Fx 4.5, так как он имеет новый moduleLoader, который поддерживает скины, что может сделать его довольно крутым.

0 голосов
/ 16 августа 2011

Ваш обработчик onReady удаляет standin, но не индикатор выполнения.

...