2010-01-29 11 views
0

我想聲明將在我的flex mxml主應用程序中的其他地方使用的私有變量。但我只需要在我的xml文件中創建變量時創建相同的數字。創建私人var yada:無論如何;取決於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> 

我主要的柔性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是如何被添加到我的Flex應用程序:

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

你有沒有想過一組位置。你的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); 
} 
+0

我不知道很多關於陣列。我會研究這個,看看我是否無法實現它的工作。謝謝......實際上,我也不完全理解課程。我是Flash編程的新手......承擔了一個大型項目並一直在學習。 – Phil 2010-01-29 20:31:38

+0

你會幫我一個忙,並重命名這些,以便他們匹配我的XML?我不知道如何將此代碼應用於我的目的。陣列對我來說沒有意義。 – Phil 2010-01-29 21:20:37

+0

這是正確的答案。任何時候你發現自己在寫「myvar1」。 「myvar2」,你應該爲它創建一個值對象並將它們存儲在一個數組中。否則,如果您需要添加9個「經緯度/名稱」三聯體?你必須編輯你的課程,而你不想這麼做:) – 2010-02-05 11:11:51