【问题标题】:Creating MXML components via an ActionScript loop in Flex在 Flex 中通过 ActionScript 循环创建 MXML 组件
【发布时间】: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


【解决方案1】:

放这条线

var curMenuItem:menuItemContainer = new menuItemContainer();

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

【讨论】:

  • 是的,已经完成了,谢谢。我认为在每次迭代中将它们添加到 VGroup 会显示对象的实例及其当前数据,但似乎我错了。再次感谢! B.
猜你喜欢
  • 2013-01-12
  • 2011-03-01
  • 2014-04-01
  • 2011-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-23
  • 1970-01-01
相关资源
最近更新 更多