我正在使用Flash Builder 4.6为uni项目创建应用程序。我有一个自定义Spark组件,我需要在运行时动态创建该组件的许多实例,具体取决于通过PHP脚本返回的XML元素的数量。
这可能有点令人困惑,所以让我写下步骤: 1)应用程序将HTTPService请求发送到服务器上托管的PHP脚本。 2)PHP访问SQL数据库并返回一系列XML数据。 3)ActionScript动态创建我的自定义Flex组件的X实例,其中X是XML中的数据数。
这是我到目前为止所获得的代码(不整洁,因为我试图让它工作):
的ActionScript:
[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的实例中使用,但是当每个XML数据被添加到menuItemGroup时,它将覆盖已经存在的那个。我不确定该项目是否实际被覆盖,或者新项目是否只是位于较早的项目之上,但如果后者为真,我找不到安排组件的方法。我已经尝试在循环中设置menuItem.y(作为count2的函数),但无济于事。
提前感谢任何和所有建议/答案。 本杰明。
答案 0 :(得分:2)
把这一行
var curMenuItem:menuItemContainer = new menuItemContainer();
在你的while循环中。使用您的代码,您只需创建一个menuItemContainer
实例,然后在while循环中不断更改该menuItemContainer
的属性。相反,您需要在循环的每次迭代中创建一个新的,不同的menuItemContainer
实例。