0

我正在使用一个 forEach 循环,为我的 XML 中的每个节点添加电影剪辑到舞台。当它们被添加到循环中时,如何为这些影片剪辑提供唯一的实例名称?

这是我的 parseList 函数,其中包含提到的 forEach 循环和我正在使用的对我不起作用的语法。

private function parseList():void {
    //use Number variables to keep track of current x and y properties as list display is generated
    var titleField:TextField = TextField(listItem);
    var itemY:Number = 503;
    var itemX:Number = 0;
    var artistTracker:String = Playmaster_Jukebox.currArtist;
    var artID = 0;
    var albID = 0;

    var itemID:Number=0;
    for each (var listItemData:XML in mainXML.artist[artID].album[albID].track) {

        var listItem:MovieClip = new ListItem(itemTitle);
        listContainer.addChild(listItem);
        listItem.name = "itemID" + " " + albID + " " + itemID;
        itemID++;

        listItem.y = itemY;
        listItem.x = itemX;

        TextField(listItem.listItemTitleField);
        itemY += listItem.height + 10;
    }
}

我是 forEach 循环的初学者,但还不了解它,因此感谢您的评论!

4

1 回答 1

0

如果我正确理解您的问题;那么您在询问如何在从 XML 文档中读取“listItem”MovieClip 时对其进行存储。

为此,您可能需要使用 Array 或 Map:

使用数组即:

var listItemArray:Array = new Array();
for each (var listItemData:XML in mainXML.artist[artID].album[albID].track) {
        var listItem:MovieClip = new ListItem(itemTitle);
        listContainer.addChild(listItem);

        listItemArray.push(listItem);// adds the item to the array
}

使用地图即:

var listItemMap:Object = {};
for each (var listItemData:XML in mainXML.artist[artID].album[albID].track) {
         var listItem:MovieClip = new ListItem(itemTitle);
         listContainer.addChild(listItem);
         listItem.name = "itemID" + " " + albID + " " + itemID;

         listItemMap[listItem.name];// adds an item by the .name you created for it.
}

该地图还允许您通过您为不同项目指定的名称来查找项目。即:listItemMap["name"] 会找到名为“name”的元素。

该数组将允许您按顺序循环它们。即: listItemArray[0] 会找到第一个元素。

由您决定哪个更适合您的目的。

于 2013-03-24T08:30:13.807 回答