我有一个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。
答案 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());
}
}
现在,您可以通过任何代码参考myCanvas1
,myCanvas2
和myCanvas3
。这基本上是MXML编译器在MXML中声明组件并为其指定id
时为您所做的。