Apache flex 通过Flex中的ActionScript循环创建MXML组件
我正在使用Flash Builder 4.6为uni项目创建一个应用程序。我有一个定制的Spark组件,我需要在运行时根据通过PHP脚本返回的XML元素数量动态创建该组件的多个实例 这可能有点混乱,所以让我写下以下步骤: 1) 应用程序向服务器上托管的PHP脚本发送HTTPService请求。 2) PHP访问SQL数据库并返回一系列XML数据。 3) ActionScript动态创建自定义Flex组件的X个实例,其中X是XML中的数据数 以下是我到目前为止得到的代码(不整洁,因为我正在努力使其工作): 动作脚本:Apache flex 通过Flex中的ActionScript循环创建MXML组件,apache-flex,actionscript,foreach,flash-builder,mxml,Apache Flex,Actionscript,Foreach,Flash Builder,Mxml,我正在使用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++;
}
}
[Bindable]
公共变量保持数组:数组=新数组(100);
公共函数createMenu(e:MouseEvent):无效{
变量计数:int=0;
var curMenuItem:menuItemContainer=new menuItemContainer();
while(计数<加载菜单长度){
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=计数*120
//menuItemGroup.addElement(curMenuItem);
holderArray[计数]=curMenuItem;
计数++;
}
//testString=holderArray[1].itemName;
var count2:int=0;
对于每个(变量menuItem:holderArray中的menuItemContainer){
menuItem.name=“menuItem”+count2;
menuItem.id=“menuItem”+count2;
//testString+=menuItem.name;
menuItemGroup.addElement(menuItem);
count2++;
}
}
MXML:
这段代码所发生的事情似乎是,返回的三个XML数据中的每一个都在menuItemContainer实例中使用,但当每一个都添加到menuItemGroup时,都会覆盖已经存在的数据。我不确定该项是否真的被覆盖,或者新项是否只是位于早期项之上,但如果后者为真,我无法找到安排组件的方法。我尝试在循环中设置menuItem.y(作为count2的函数),但没有效果
提前感谢您提供的所有建议/答案。
本杰明。把这条线划上
var curMenuItem:menuItemContainer = new menuItemContainer();
在你的while循环中。按原样使用代码,您只需创建一个
menuItemContainer
实例,然后在while循环中不断更改该menuItemContainer
实例的属性。相反,您需要在循环的每次迭代中创建一个新的、不同的menuItemContainer
实例。看起来有人已经给了您正确的答案。我唯一的其他评论是,您可以考虑将您的项目显示在列表W/IN渲染器和XMListList中,而不是手动创建孩子并将它们放置在一个组内。我必须在这一点上返回@ www. flopasa.:在这种情况下,您应该使用列表或DATGRAUP(或Flex 3中的转发器)。简单多了。我还在学很多Flex的东西。我才用了几个月。似乎有很多不同的方法来实现任何事情(就像大多数编程一样)。如果我使用XMLListCollection,我将如何在应用程序中显示它?我尝试使用一个数据组,但没有成功。干杯。是的,结束了,谢谢。我认为在每次迭代中将它们添加到VGroup中会显示对象的一个实例及其当前数据,但似乎我错了。再次感谢!B
var curMenuItem:menuItemContainer = new menuItemContainer();