Предварительный загрузчик приложения Flex 4 отображается в течение нескольких секунд (быстро загружается после этого) - PullRequest
1 голос
/ 27 марта 2012

Я нахожусь где-то между начинающим и средним уровнями с Flex и совершенно новым для Flex 4. Я создал журнальное приложение для клиента, которое извлекает динамическую информацию о проблеме и генерирует книгу с использованием компонента qs FlexBook.Проблема заключается в том, что приложение, похоже, навсегда загружается.

Индикатор выполнения приложения не отображается в течение нескольких секунд.Как только он наконец появится, приложение быстро загружается.Размеры файлов не кажутся мне слишком большими, и остается вопрос, использую ли я RSL, объединяю код или преобразовываю его в модуль.Вы можете увидеть эффект здесь: http://whosthatnerd.com/clients/jones/issues/

Вот мой файл MXML:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
               xmlns:s="library://ns.adobe.com/flex/spark"
               xmlns:mx="library://ns.adobe.com/flex/mx"
               preloader="mx.preloaders.DownloadProgressBar"
               skinClass="skins.TransparentAppSkin"
               creationComplete="init()"
               minWidth="955"
               minHeight="600">

    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>

    <fx:Style>
        @namespace s "library://ns.adobe.com/flex/spark";
        @namespace mx "library://ns.adobe.com/flex/mx";
        @namespace qsctrl "qs.controls.*";
        qsctrl|FlexBook {
            hardbackCovers: false;
            paddingTop: 0;
            paddingRight: 0;
            paddingBottom: 0;
            paddingLeft: 0;
            paddingSpine: 0;
            color: #000000;
            textRollOverColor:  #000000;
            edgeAndCornerSize: 70;
            background-color: #000000;
        }
        mx|HBox {
            paddingTop: 0;
            paddingBottom: 0;
            paddingLeft: 0;
            paddingRight: 0;
            horizontalGap: 0;
        }
        mx|Image {
            padding: 0;
            margin: 0;
        }
        mx|ProgressBar {
            color: #EEEEEE;
        }
    </fx:Style>

    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.containers.HBox;
            import mx.controls.Alert;
            import mx.controls.Image;
            import mx.core.IUIComponent;
            import mx.core.UIComponent;
            import mx.events.ResizeEvent;

            import qs.controls.FlexBook;

            private var issueID:String;
            private var xmlLoader:URLLoader;
            private var xml:XML;
            private var swfLoader:Loader;
            private var swfClass:Class;
            private var book:FlexBook;
            public var pageHeight:int = 890;
            public var pageWidth:int = 600;

            private function init():void {

                loadingIndicator.x = appCanvas.width / 2 - loadingIndicator.width / 2;
                loadingIndicator.y = appCanvas.height / 2 - loadingIndicator.height / 2;

                issueID = parameters.issue_id;

                xmlLoader = new URLLoader();

                xmlLoader.addEventListener(ProgressEvent.PROGRESS, progressHandler);
                xmlLoader.addEventListener(Event.COMPLETE, fillBook);

                xmlLoader.load(new URLRequest('/clients/jones/issues/issues/view/'+issueID+'.xml'));

            }

            public function progressHandler(e:ProgressEvent):void {

                loadingIndicator.setProgress(e.bytesLoaded, e.bytesTotal);
                loadingIndicator.label = 'Loading Publication... '+Math.round(e.bytesLoaded / e.bytesTotal * 100).toString();

            }

            private function scaleBook(e:* = null):void {

                book.height = Math.ceil((appCanvas.height * 0.9));
                book.width = Math.floor((book.height * 1.491285403050109));
                book.y = appCanvas.height / 2 - book.height / 2;
                book.x = appCanvas.width / 2 - book.width / 2;

            }

            private function fillBook(e:Event):void {

                xml = new XML(e.target.data);

                if(xml.use_swf == 1) {

                    trace('loading: '+xml.swf);

                    swfLoader = new Loader();
                    swfLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, useExternalSwf);
                    swfLoader.load(new URLRequest(xml.swf));


                } else {

                    usePageImages(xml);

                }

                publicationName.text = xml.publication.name;

                var d:Array = String(xml.pub_date).split('-');

                issueDate.text = 'Published: '+d[1]+'/'+d[2]+'/'+d[0];

            }

            public function prepareDisplay():void {

                loadingIndicator.visible = false;

                bookDetails.x = book.x;
                bookDetails.y = book.y;
                bookDetails.width = book.width / 2;
                bookDetails.height = book.height;


                bookDetails.visible = true;

            }

            public function usePageImages(xml:XML):void {

                book = new FlexBook();
                book.itemSize = 'halfPage';
                scaleBook();

                var box:HBox;
                var img:Image;
                var pages:Array = new Array();

                for(var i:int = 0; i < xml.page.length(); i++) {

                    trace(i);
                    trace(xml.page[i].image_url);

                    box = new HBox();
                    box.horizontalScrollPolicy = 'off';
                    box.verticalScrollPolicy = 'off';
                    img = new Image();
                    img.maintainAspectRatio = true;
                    img.percentHeight = 100;
                    img.percentWidth = 100;
                    img.source = xml.page[i].image_url;
                    box.addChild(img);

                    if(i == 0) {

                        book.cover = box;

                    } else if(i+1 == xml.page.length()) {

                        book.backCover = box;

                    } else {

                        book.addChild(box);
                        pages.push(box);

                    }

                }

                book.content = pages;

                appCanvas.addElement(book);

                prepareDisplay();

                appCanvas.addEventListener(ResizeEvent.RESIZE, scaleBook);

            }

            public function useExternalSwf(e:Event):void {

                trace('LOADED SWF');

                book = new FlexBook();
                book.itemSize = 'halfPage';
                scaleBook();

                var mc:MovieClip = MovieClip(swfLoader.content);

                swfClass = mc.constructor;

                var dupe:MovieClip;
                var comp:UIComponent;
                var box:HBox;
                var pages:Array = new Array();


                for(var i:int = 0; i < mc.totalFrames; i++) {

                    dupe = MovieClip(new mc.constructor);
                    dupe.gotoAndStop(i);

                    comp = new UIComponent();
                    comp.addChild(dupe);

                    box = new HBox();
                    box.addChild(comp);
                    box.horizontalScrollPolicy = 'off';
                    box.verticalScrollPolicy = 'off';

                    dupe.width = comp.width = book.width / 2;
                    dupe.height = comp.height = book.height;

                    if(i == 0) {

                        book.cover = box;

                    } else if(i+1 == xml.page.length()) {

                        book.backCover = box;

                    } else {

                        book.addChild(box);
                        pages.push(box);

                    }

                }

                book.content = pages;

                appCanvas.addElement(book);

                prepareDisplay();

                appCanvas.addEventListener(ResizeEvent.RESIZE, scaleBook);

            }

        ]]>
    </fx:Script>

    <s:BorderContainer id="bookDetails" visible="false">
        <s:backgroundFill>
            <s:LinearGradient>
                <s:entries>
                    <s:GradientEntry color="0x707070" ratio="0.00" alpha="1" />
                    <s:GradientEntry color="0x505050" ratio="0.75" alpha="1" />
                </s:entries>
            </s:LinearGradient>
        </s:backgroundFill>
        <s:borderStroke>
            <s:SolidColorStroke joints="miter" color="0x101010" weight="12" /> 
        </s:borderStroke>
        <s:layout>
            <s:VerticalLayout paddingTop="18" paddingRight="18" paddingBottom="18" paddingLeft="18" />
        </s:layout>
        <s:Label id="publicationName" fontSize="32" fontWeight="bold" color="0xEEEEEE" alpha="1" />
        <mx:Text id="issueDate" fontSize="20" color="0xEEEEEE" alpha="1" />
        <mx:Text id="bookInstructions" fontSize="20" color="0xEEEEEE" alpha="1" text="Click or drag the corners to turn the page." />
    </s:BorderContainer>

    <s:BorderContainer id="appCanvas" left="0" right="0" top="0" bottom="0" skinClass="skins.TransparentAppSkin"></s:BorderContainer>

    <mx:ProgressBar id="loadingIndicator" label="Loading Publication..."/>

</s:Application>

Я, честно говоря, не знаю, является ли проблема моим плеером или моим кодом.Заранее спасибо за помощь:)

...