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);
生成時可以通過按鈕一個個觸發,也可以通過數組循環來生成
上面代碼中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);
}
這樣就取得了子容器裏的內容了