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

时间:2015-09-03 20:55:20

标签: actionscript-3 flex actionscript addchild

我有一个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');

只返回null。

我正在使用Flex 3.5 SDK。

2 个答案:

答案 0 :(得分:3)

而不是指定o.id = 'modNewt';使用o.name = 'modNewt';并尝试使用viewStack.getChildByName('modNewt');访问子级。它应该工作。

答案 1 :(得分:1)

就像我的评论所说,使用addChild是正确的,但您的其他代码并不有用。 childDescriptors是Flex框架用于构建MXML子项的内容,因此不希望它反映ActionScript中的动态更改。并且getChildByName要求孩子有name值,而您没有给他们name,您已经给他们id

通常,如果我想动态添加视图子项,我会执行MXML编译器对MXML子项的操作:创建在创建子项时引用子项的属性。例如:

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编译器在MXML中声明组件并为其指定id时为您所做的。