ActionScript:以编程方式将子项添加到 `mx:ViewStack`

ActionScript: programmatically adding children to a `mx:ViewStack`

我有一个 Flex mx:ViewStack,它有一些 Flex 子项,但我想使用 ActionScript 添加更多子项。

var o:MyCanvas = new MyCanvas;
o.id = 'modRipley';
viewStack.addChild(o);
o = new MyCanvas;
o.id = 'modNewt';
viewStack.addChild(o);
o = new MyCanvas;
o.id = 'modGorman';
viewStack.addChild(o);

逐步完成,我没有看到 childDescriptors 成员(_childDescriptors)有任何增加,并且:

viewStack.getChildByName('modNewt');

只是 returns 空。

我正在使用 Flex 3.5 SDK。

而不是分配 o.id = 'modNewt'; 使用 o.name = 'modNewt'; 并尝试使用 viewStack.getChildByName('modNewt'); 访问子项。它应该有效。

正如我的评论所说,使用 addChild 是正确的,但您的其他代码没有用。 childDescriptors 是 Fl​​ex 框架用来构造 MXML children 的内容,因此它不会反映在 ActionScript 中所做的动态更改。 getChildByName 要求 child 具有 name 值,虽然您没有给他们一个 name,但您给了他们一个 id

通常,如果我想动态添加视图 children,我会执行 MXML 编译器对 MXML children 所做的操作:创建将引用 children 的属性当我创建它们时。例如:

public class Example extends SomeMxmlComponentWithViewStack {
    public var myCanvas1:MyCanvas;
    public var myCanvas2:MyCanvas;
    public var myCanvas3:MyCanvas;

    override protected function createChildren():void {
        super.createChildren(); // creates the MXML children
        viewStack.addChild(myCanvas1 = new MyCanvas());
        viewStack.addChild(myCanvas2 = new MyCanvas());
        viewStack.addChild(myCanvas3 = new MyCanvas());
    }
}

现在,您可以从任何代码中参考 myCanvas1myCanvas2myCanvas3。当您在 MXML 中声明一个组件并给它一个 id.

时,这实际上就是 MXML 编译器为您做的事情