создать частную вар яду: что угодно; в зависимости от количества xml - PullRequest
0 голосов
/ 29 января 2010

Я пытаюсь объявить закрытые переменные, которые будут использоваться в другом месте моего основного приложения 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, прежде чем объявить эти переменные?

1 Ответ

1 голос
/ 29 января 2010

Задумывались ли вы о множестве мест. Из-за 2000 переменных у меня болит голова.

Location.as:

package my.locations.util    {
    public class Location {
        public var latitude;
        public var longitude;
        public var name;
        //... others, constructor
    }
 }

и

 var locations:Array = [];
 var locationsXML:XML = //...
 for (var locationXML:XML in locationsXML.location) {
     var location:Location = new Location(locationXML.latitude, locationXML.longitude, ...);
     locations.push(location);
 }
...