控制动态创建的容器

时间:2010-12-29 21:03:58

标签: flex actionscript-3

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

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

原样,我有一个包含BorderContainer和DataGrid的Application。在运行时,基于包含X& X的数据创建3个新的BorderContainer(可拖动且可调整大小)。 Y坐标,高度和宽度值,然后添加到预先存在的BorderContainer。我将如何获取这些子BorderContainers的属性以显示并在DataGrid中保持最新(例如移动/调整大小时)?

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

假设一个纯粹的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,否则发布更多信息,我们会看到我们可以弄清楚的。