2009-11-18 44 views
0

的Flash AS3:如何在同一時間AS3加載XML項目一個

有誰知道如何加載一個項目在一個時間,而不是在循環負荷,在使用AS3一個正常的過程?我遇到覆蓋價值的問題。

我不能作出這樣的工作,它總是覆蓋最後value.I試圖用字典,雖然它會幫助解決我的問題......

我希望能夠爲每個按鈕時我點擊它顯示我的標記的可見性。

private function handleMarkers(event:CustomEventCenter):void 
    { 
     // Get items info from custom dispatcher 
     var nom  = event._name.nom; 
     ... 

     var tabMarkerID:Array = new Array(); 

     // Defined positions for button 
     var xPos = 20; 
     var yPos = 0; 

     // Store the right markerID into each index separated 
     if (event._name.markerID == '01') { 
      tabMarkerID[0] = event._name.markerID; 
     } else if (event._name.markerID == '05') { 
      tabMarkerID[1] = event._name.markerID; 
     } 

     // Create a dictionary 
     var dict:Dictionary = new Dictionary(); 

     // Create arrondissement objects for 14 available markers 
     var arrond1:Object = new Object(); 
     var arrond2:Object = new Object(); 

     dict[arrond1] = tabMarkerID[0]; 
     dict[arrond2] = tabMarkerID[1]; 

     for (var i=0;i<2;i++) 
     { 
      pointRepere = new PointRepere(); 
      for (var item:Object in dict) 
      { 
       if (dict[item] != undefined) {   
        pointRepere.name = String(dict[item]); // here the issue 
        pointRepere.x = xPos; 
        pointRepere.y = yPos; 
        yPos += i*20 + 40; 
        pointRepere.buttonMode = true; 

        addChild(pointRepere); 
        createMarkers(dict[item], nom); 
        pointRepere.addEventListener(MouseEvent.CLICK, handlePointClicked); 
       } 
      } 
     } 

    } 


    private function handlePointClicked(event:MouseEvent):void 
    { 
     trace("Name: "+event.target.name); 

     displayMarkerType(event.target.name); 
    } 


    private function displayMarkerType(id:String):void 
    { 
     for (var i=0; i< _marker.tabArrondMarker[id].markers.length; i++) 
     { 
      var marker:Marker = _marker.tabArrondMarker[id].markers[i]; 
      (!marker.visible) ? marker.visible = true : marker.visible = false; 
     } 
    } 
+0

。你可以直接把它放到一個數據提供者。 – Treby 2009-11-18 05:42:54

回答

0

您可以加載它們全部,然後通過它們的索引引用它們。 Like

xmlData.YourChildNodeName[0] 

其中0是索引號。這將僅以該名稱拉回第一個子節點。

+0

然後我可以加載到下一個? 動態地在時間的一個項目 我相信我需要一個計數器 – Qpixo 2009-11-18 14:58:52

1

看起來好像你想延遲加載你的xml文件 - 你需要構建一個基於你想加載的項目的數組運行的循環 - 這裏是一個如何做到這一點的例子:

private var Array:list; 
private var int:count = 0; 

private function init()void 
{ 
    list = {"one.xml","two.xml","three.xml"}; 
    loadXML(); 
} 

private function loadXML():void 
{ 
    //create and init your loader 
    var loader:URLLoader = new URLLoader(new URLRequest(list[count])); 
    loader.addEventListener(Event.COMPLETE, completeHandler); 
    loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); 
    loader.load(); 
} 

private function completeHandler(e:Event):void 
{ 
    //Logic here to handle the loaded xml 
    continueLoad(); 
} 

private function ioErrorHandler(e:IOErrorEvent):void 
{ 
    //Logic here to handle the error 
    continueLoad(); 
} 

private function continueLoad():void 
{ 
    if(count < list.length){ 
      count++; 
      loadXML(); 
    }else{ 
      //Some logic here to do something else after all of your files have been loaded 
    } 
} 

我只是這個扔了一起,你在這兒可能需要修復一個或兩個的事情,但你看到的要點 - 這是一個循環,只有後,而不是僅僅把它扔每個單獨的文件已加載執行所有這些都在for循環中,讓它執行並隨後磨碎然後崩潰。

希望這會有所幫助!如果你有一個數據網格,可以使用

+0

不像你的例子,這是非常好的提示。我只裝載了一個XML文件,而我需要找到一種方法,不會覆蓋任何以xml屬性和名稱加載的值。 比方說,XML文件的結構: <點ID = 「01」> 測試1 ... <點ID = 「02」> 的Test2 ... ... Qpixo 2009-11-19 18:51:05