Flex引入子容器有两种方式
1.通过MXML可视化标签,如
<ng:EmpSuggestion id="topManagerInput" text="{(globalTenantEntityBean.topManagers)[0].notesId}" />
2.在actionscript中添加,如
var emp1:EmpSuggestion = new EmpSuggestion();
emp1.name="emp1";
hbox1.addChild(emp1);
显然,第一种方式只是静态的容器,第二种才满足动态的添加。
本文便是基于第二种方式讨论子容器的动态添加与销毁,并如何赋予并获得子容器中的数据。例如我们要实现动态的添加输入框,同时给输入框赋值。生成后我们也能删除指定的子容器,最后把子容器中的值取出来。
第一步,引入一静态容器
<mx:VBox id="tenantAdmin">
</mx:VBox>
第二步,然后actionscript中动态添加,同时考虑到删除,所以子容器是HBox再嵌套textInput和delete的action(可以使按钮或图标),通过给按钮或图标加监控来实现特定hBox的删除。并给Child起个名字方便以后读数据时“认人”
var hbox1:HBox = new HBox();
hbox1.setStyle("verticalAlign","middle");
var img1:Image = new Image();
img1.source = deleteIcon;
img1.buttonMode = true;
img1.addEventListener(MouseEvent.CLICK,cancelFunction1)
var emp1:EmpSuggestion = new EmpSuggestion();
emp1.name="emp1";//起名字
hbox1.addChild(emp1);
hbox1.addChild(img1);//添加子容器
tenantAdmin.addChild(hbox1);
生成时可以通过按钮一个个触发,也可以通过数组循环来生成
<textarea cols="50" rows="15" name="code" class="c-sharp"> for(var c:int=1;c<globalTenantEntityBean.topManagers.length;c++) { var hbox:HBox = new HBox(); hbox.setStyle("verticalAlign","middle"); var img:Image = new Image(); img.source = deleteIcon; img.buttonMode = true; img.addEventListener(MouseEvent.CLICK,cancelFunction) var emp:EmpSuggestion = new EmpSuggestion(); emp.text = (globalTenantEntityBean.topManagers)[c].notesId; emp.name="emp"; hbox.addChild(emp); hbox.addChild(img); topManager.addChild(hbox); }</textarea>
上面代码中cancelFunction1就是实现删除,删除用的是removeChild方法,参数的生成:先选中对象event.currentTarget指的是click的那个按钮或Image,(event.currentTarget).parent是这个按钮的父容器,转化为HBox类。
public function cancelFunction1(event:MouseEvent):void
{
tenantAdmin.removeChild(HBox((event.currentTarget).parent));
}
第三步,读取子容器中的数据,用getChildren()返回一个子容器的数组,我一开始取不到数据犯的错误就是for each(var hbox:HBox in topManager),后来trace的时候发现topManager里是没有子容器的,必须调用getChildren()方法取得子容器,再用getChildByName通过名字来取.
for each(var hbox:HBox in topManager.getChildren())
{
var ep:EmployeeVBean = new EmployeeVBean();
ep.empNotesId = (hbox.getChildByName("emp1")as EmpSuggestion).text;
arr.addItem(ep);
}
这样就取得了子容器里的内容了