0

我正在使用 Flash Builder 4.6 为 uni 项目创建应用程序。我有一个自定义 Spark 组件,我需要在运行时根据通过 PHP 脚本返回的 XML 元素的数量动态创建该组件的多个实例。

这可能有点令人困惑,所以让我编写以下步骤: 1) 应用程序向服务器上托管的 PHP 脚本发送 HTTPService 请求。2) PHP 访问 SQL 数据库并返回一系列 XML 数据。3) ActionScript 动态创建我的自定义 Flex 组件的 X 个实例,其中 X 是 XML 中的数据数。

这是我到目前为止的代码(不整洁,因为我试图让它工作):

动作脚本:

        [Bindable]
        public var holderArray:Array = new Array(100);

        public function createMenu(e:MouseEvent):void {
            var count:int = 0;
            var curMenuItem:menuItemContainer = new menuItemContainer();
            while (count < loadedMenu.length){
                curMenuItem.itemName = loadedMenu.getItemAt(count).name;
                curMenuItem.itemDesc = loadedMenu.getItemAt(count).description;
                curMenuItem.itemPrice = numForm.format(loadedMenu.getItemAt(count).price);                  
                curMenuItem.imageFile = loadedMenu.getItemAt(count).url;
                //curMenuItem.y = count * 120
                //menuItemGroup.addElement(curMenuItem);
                holderArray[count] = curMenuItem;
                count ++;
            }
            //testString = holderArray[1].itemName;
            var count2:int = 0;
            for each (var menuItem:menuItemContainer in holderArray){
                menuItem.name = "menuItem" + count2;
                menuItem.id = "menuItem" + count2;
                //testString += menuItem.name;
                menuItemGroup.addElement(menuItem);
                count2++;
            }
        }

MXML:

<s:VGroup id="menuItemGroup" x="40" y="150">
</s:VGroup>

该代码似乎正在发生的事情是,我返回的三个 XML 数据中的每一个都在 menuItemContainer 的实例中使用,但是当每个都添加到 menuItemGroup 时,它会覆盖已经存在的那个。我不确定该项目是否真的被覆盖了,或者新项目是否只是位于较早的项目之上,但如果后者是真的,我找不到安排组件的方法。我尝试在循环中设置 menuItem.y(作为 count2 的函数),但无济于事。

提前感谢您提供的任何和所有建议/答案。本杰明。

4

1 回答 1

2

把这条线

var curMenuItem:menuItemContainer = new menuItemContainer();

在你的 while 循环内。使用您的代码,您只需创建一个实例,然后在您的 while 循环中menuItemContainer不断更改该实例的属性。menuItemContainer相反,您需要为menuItemContainer循环的每次迭代创建一个新的、不同的实例。

于 2012-07-11T04:29:22.100 回答