flex 动态创建组件之容器自适应

为了节约swf文件的大小,可以采取动态创建组件的方式,那么动态创建组件就要考虑到组件容器自适应大小。
比如:
<s:BorderContainer x="5" y="5" width="100%"  right="5" left="5" 
        autoLayout="true" id="bc">
  <s:layout >
   <s:TileLayout />
  </s:layout>
 </s:BorderContainer>
我要在上边这个容器里动态装入一些组件,很有可能容器的高度不够装下多个组件,这个时候,就要让程序动态的改变容器的大小。
改变容器的大小可以根据添加的最后一个组件的top和height来决定,那么我们什么时候才能获取得最后一个组件的大小呢?看下边的代码:

public function init():void{
    var user:TblBsUserType = new TblBsUserType();
    function initFormItem(label:String,porp:String):FormItem{
     var fi:FormItem  =ElementFactory.createFormItem(label,user,porp);
     fi.setStyle("paddingTop",10);
     fi.setStyle("paddingLeft",20);
     bc.addElement(fi);
     return fi;
    }

    initFormItem("用户编码:","butyId");
    initFormItem("用 户 名:","butyName");
    initFormItem("用户密码:","butyPassword");
    var fi:FormItem=initFormItem("用户角色:","butySate");
  //注意下边这种方式可以设置bc的高度吗???
     bc.height =fi.top+ fi.height+10;
}

如果动态创建组件,那么直接获取组件的高度是不行的。像上边这种情况,fi.height的值多数情况是0.
其实根据flex组件的生命周期,我们知道只有在creationComplete事件的时候,组件才完成了它所有的初始化工作,包括组件的位置,样式,大小等信息。所以,要想获得组件的高宽,我们应该在creationComplete事件中来完成这个任务。所以上边
bc.height=fi.top+fi.height+10;
应该修改为:
fi.addEventListener("creationComplete",function(){
     bc.height =fi.top+ fi.height+10;
    });
这样才可以正确设置父容器的高度。