Я нахожусь где-то между начинающим и средним уровнями с 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>
Я, честно говоря, не знаю, является ли проблема моим плеером или моим кодом.Заранее спасибо за помощь:)