Как загрузить элемент XML по одному as3 за раз - PullRequest
0 голосов
/ 18 ноября 2009

Flash AS3:

Кто-нибудь знает, как загружать элементы по одному вместо загрузки в цикле при обычном процессе с использованием AS3? У меня проблема с перезаписанным значением.

Я не мог заставить это работать, оно всегда перезаписывало последнее значение. Я пытался использовать словарь, и хотя это поможет решить мою проблему ...

Я хочу иметь возможность для КАЖДОЙ кнопки, когда я нажимаю, она отображает видимость моих маркеров.

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; 
        }
    }

Ответы [ 2 ]

1 голос
/ 18 ноября 2009

Кажется, что вы хотели бы лениво загружать ваши 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 голосов
/ 18 ноября 2009

Вы можете загрузить их все, а затем ссылаться на них по их индексу. Как

xmlData.YourChildNodeName[0] 

Где 0 - номер индекса. Это просто вытянет первый дочерний узел с таким именем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...