【发布时间】:2012-07-11 04:19:56
【问题描述】:
我正在使用 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 的函数),但无济于事。
在此先感谢您提供任何和所有建议/答案。 本杰明。
【问题讨论】:
-
看起来有人已经给了你正确的答案。我唯一的其他评论是,您可以考虑在带有 itemRenderer 和 XMLListCollection 的列表中显示您的项目,而不是手动创建子项并将它们放在组中。
-
我必须在这个问题上支持@www.Flextras.com:在这种情况下,您应该使用 List 或 DataGroup(或 Flex 3 中的 Repeater)。容易得多。
-
我还在学习很多 Flex 的东西。我只用了几个月。似乎有很多不同的方法可以实现任何事情(就像大多数编程一样)。如果我使用 XMLListCollection,我将如何在应用程序中显示它?我尝试使用 DataGroup 但我没有走远。干杯。
标签: apache-flex actionscript foreach flash-builder mxml