【问题标题】:Controlling dynamically created containers控制动态创建的容器
【发布时间】:2010-12-29 21:03:57
【问题描述】:

请原谅,我是 Flash Builder 4 和 Actionscript 3 的新手(实际上,除了一些非常简单的东西之外,我对整个编程也是如此)。我已经看过/阅读了一堆教程,并开始了一个项目,但现在似乎已经碰壁了。答案很可能很简单,但似乎在暗示我。

我如何(或我应该采取什么方法)来控制我动态创建的可视元素,例如 BorderContainer 的?

按原样,我有一个包含 BorderContainer 和 DataGrid 的应用程序。在运行时,基于包含 X 和 Y 坐标、高度和宽度值的 XML 数据创建 3 个新的 BorderContainers(可拖动和调整大小),然后添加到预先存在的 BorderContainer 中。我将如何让这些子 BorderContainers 的属性在 DataGrid 中显示并保持最新(例如当它们被移动/调整大小时)?

我未来的意图是拥有一个自定义组件,在单独的区域中显示这些项目的摘要(想想 Photoshop 的“图层”控件,但要简单得多),但希望更好地了解正在发生的事情首先。

感谢任何输入、文档、示例等。再次,我为这可能是一个非常简单的解决方案道歉,或者如果我的任何语言不清楚,我是新手 ^_^;

【问题讨论】:

    标签: apache-flex actionscript-3


    【解决方案1】:

    我会创建一个 BorderContainers 的 ArrayCollection,并设置它们的各种属性(还要确保在父 BorderContainer 上调用 addElement)。确保将 ArrayCollection 声明为 Bindable,然后将其设置为 DataGrid 的 dataProvider。然后根据您要显示的任何属性(高度、宽度等)为您的 DataGrid 指定列。现在每当 BorderContainers 的属性发生变化时,DataGrid 都会自动更新。

    【讨论】:

    • 谢谢韦德。我按照你的指示做了,虽然它在 DataGrid 中引入了更多的错误,并为我想要如何继续添加了更多的混乱,但它确实解决了问题并给了我更多的工作。让学习体验继续!谢谢!
    【解决方案2】:

    假设一个纯 AS3 项目,最好的方法是为您的对象构建一个字典。

    我们还假设您已经为组件创建了标识符,或者可以在运行时轻松创建它们。

    var containers:Dictionary = new Dictionary();
    
    private function _init():void
    {
      //some loop to create objects
      containers[newObject.name] = newObject;
    }
    

    稍后您只需从容器字典中获取散列索引即可快速访问它。

    现在,假设一个 Flex 项目,我们可以采取更多方法:

    • DisplayObjectContainer 实现 getChildByName()
    • Group 实现 getElementAt 和 numElements 来迭代、检查名称并返回预期值。

    就我个人而言,我还是更喜欢字典的方式……

    至于保持最新,您可以查看 Binding(通常是仅 Flex 解决方案)或更恰当地调查调度的事件:

    • Event.RESIZE
    • Event.MOVE

    在处理程序中,只需更新您的 UI!

    HTH,否则发布更多信息,我们会看看我们能弄清楚什么。

    【讨论】:

    • 我选择了 Wade Mueller 的解决方案来解决这个问题,因为它是我已经处理过的另一个 ArrayCollection 的简单实现。但是,我确实要感谢您介绍字典,因为我打算在未来使用它。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多