首页 > 网站 > WEB开发 > 正文

3.4.在容器中动态添加和移除子组件

2024-04-27 13:51:47
字体:
来源:转载
供稿:网友
3.4.1 问题
需要程序在运行时从容器添加和移除子组件而不使用Repeater 或者DataProvide 控件。
3.4.2 解决办法
使用addChild 或者addChildAt 方法来添加子组件,同理,使用removeChildAt 或者
removeAllChildren 方法来移除子组件。
3.4.3 讨论
Flex 方法使得添加和移除子组件操作变得容易,但是UIComponent 控件和容器则遵从稍显不同的两组规则。

addChild 方法将任何继承自UIComponent 的子组件添加到调用这个方法的控件中。例如:
+展开
-ActionScript
var component:UIComponent = new UIComponent();
addChild(component);

addChildAt 方法的不同在于,它在子组件被添加到容器的时候需要传入一个该子组件在目标容器内的索引。在容器没有布局管理器的情况下,比如Canvas 对象,这意味着被添加的子组件会在指定的z 索引深度上显示。而对于拥有布局管理器的容器来说,例如HBox 和VBox组件,被添加的子组件则会出现在提供的索引上。例如:
+展开
-ActionScript
var component:UIComponent = new UIComponent();
addChildAt(component, 3);

要移除任意子组件,调用removeChildAt,即会移除指定索引上的子组件。
+展开
-ActionScript
removeChildAt(2);

容器和UIComponent 控件也有removeChild 方法,该方法要求传入一个需要移除的子组件的引用。

Flex 提供了不同的方法来访问被添加到容器中的子组件。在获悉如何访问子组件之后,你可以使用访问子组件得到的引用来移除它们。例如,任何添加到MXML 容器的子组件都可以通过它们的id 属性来访问。任何容器的所有子组件都可以使用getChildAt 来访问它们,如下:
+展开
-ActionScript
getChildAt(index:int);

如果赋以了name 属性,也可以通过name 属性来访问它们。要确定任何组件所包含的子组件个数,使用numChildren 属性:
+展开
-ActionScript
var i:int = 0;
while(i<this.numChildren)
{
trace(getChildAt(i));
i++;
}

移除子组件的时候,可以使用子组件的index 或者id 作为引用,像后面这样的句式,removeChild(getChildAt(2));或者removeChild(this.childId);

最后,removeAllChildren 方法则可以移除添加到某一组件内的所有子组件。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表