2009-11-18 6 views
0

플래시 AS3 :xml 항목을 한 번에 하나씩로드하는 방법 as3

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

답변

0

모두로드하여 색인으로 참조 할 수 있습니다. Like

xmlData.YourChildNodeName[0] 

여기서 0은 색인 번호입니다. 이렇게하면 첫 번째 자식 노드가 그 이름으로 되돌아갑니다.

+0

다음로드 할 수 있습니까? 동적으로 하나의 항목 나는 카운터가 필요하다고 생각합니다. – Qpixo

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

좋은 예인 당신의 예와는 달리. Mine은 대신 하나의 XML 파일로만로드되며 XML 속성 및 이름에로드 된 값을 덮어 쓰지 않는 방법을 찾아야합니다. 의이 XML 파일의 구조를 가정 해 봅시다 : ... <지점 ID = "01"> 테스트 1 ... <지점 ID = "02"> Test2를 을 ... Qpixo

관련 문제