Я пытаюсь объявить закрытые переменные, которые будут использоваться в другом месте моего основного приложения flex mxml. Но мне нужно создавать переменные только в том случае, если они равны числу в моем XML-файле.
Мой фрагмент XML выглядит так:
<POIs>
<location>
<name>jane</name>
<lat>12345</lat>
<long>12345</long>
<iconFile>jane_icon.gif</iconFile>
<imageFile>jane_img.swf</imageFile>
<motion>no</motion>
</location>
<location>
<name>john</name>
<lat>23456</lat>
<long>23456</long>
<iconFile>john_icon.gif</iconFile>
<imageFile>john_img.swf</imageFile>
<motion>no</motion>
</location>
</POIs>
Мой основной файл flex mxml выглядит так:
//------------------------------------------------------------------------------0
private var locPointMarker0:PointMarker;
private var locPointMarker0_lat:Number;
private var locPointMarker0_long:Number;
//------------------------------------------------------------------------------1
private var locPointMarker1:PointMarker;
private var locPointMarker1_lat:Number;
private var locPointMarker1_long:Number;
//------------------------------------------------------------------------------2
private var locPointMarker2:PointMarker;
private var locPointMarker2_lat:Number;
private var locPointMarker2_long:Number;
//------------------------------------------------------------------------------3
private var locPointMarker3:PointMarker;
private var locPointMarker3_lat:Number;
private var locPointMarker3_long:Number;
Я не хочу объявлять 2000 личных переменных, когда в моем xml может быть только 500 мест.
Вот как мой xml добавляется в мое гибкое приложение:
public function getXMLData():void
{
var locXMLLoader:URLLoader = new URLLoader(locXMLURL);
locXMLLoader..addEventListener(Event.COMPLETE, xmlLoaded);
function xmlLoaded(e:Event):void
{
try
{
locXML = XML(locXMLLoader.data);
locXML.location.(parseLocXML(
valueOf().name.toString(),
parseFloat(valueOf().lat.toString()),
parseFloat(valueOf().long.toString()),
valueOf().iconFile.toString(),
valueOf().imageFile.toString(),
valueOf().motion.toString()));
} catch(e:Error)
{
trace("XML Load Error: " + e.message)
return;
}
}
}
public function parseLocXML(nodeName:String, lat:Number,
long:Number, iconFile:String,
imageFile:String, motion:String):void
{
if (XMLpCounter==0)
{
addMarkers(); ///this is just one of the functions that requires the private vars
}
XMLpCounter++;
}
Я попробовал подобный код ниже, но он не работает, потому что locXML не определен до тех пор, пока его не проанализируют.
//------------------------------------------------------------------------------1
if(locXML.location.length()>=1){
trace("1 has been added as a variable");
private var locPointMarker1:PointMarker;
private var locPointMarker1_lat:Number;
private var locPointMarker1_long:Number;}
//------------------------------------------------------------------------------2
if(locXML.location.length()>=2){
trace("2 has been added as a variable");
private var locPointMarker2:PointMarker;
private var locPointMarker2_lat:Number;
private var locPointMarker2_long:Number;}
Можно ли дождаться загрузки xml, прежде чем объявить эти переменные?