我有一个问题一直让我发疯。我使用以下代码在 Flex 中动态创建了一个表单:
private function init():void {
//Dynamically create form based on profiles
for each(var role:AclRoleDTO in _profiles) {
//Create form item
var fi:FormItem = new FormItem();
fi.label = role.name;
//Create checkbox
var cbx:CheckBox = new CheckBox();
cbx.id = "role_"+role.id.toString();
cbx.label = role.description;
cbx.width = 250;
cbx.selected = true;
//Add Checkbox for form item
fi.addChild(cbx);
profileForm.addChild(fi);
}
//Add save button
var fib:FormItem = new FormItem();
var btn:Button = new Button();
btn.name = "Save";
btn.label = "Save";
btn.id = "saveButton";
btn.addEventListener(MouseEvent.CLICK, onSubmitClicked);
fib.addChild(btn);
profileForm.addChild(fib);
}
这可以正常工作并创建一个带有 FormItems 的表单,其中包括基于可用配置文件的复选框 + 一个保存按钮来保存这些配置文件。
但是,当用户单击保存按钮以保存配置文件时,我使用以下方法检索选定的框,但该函数仅将最后添加的 CheckBoxes 识别为 CheckBox ...
private function onSubmitClicked(event:MouseEvent):void {
var formElements:Array = profileForm.getChildren();
var roleIds:ArrayCollection = new ArrayCollection();
var i:int = 0;
var j:int = 0;
//Parse the entire form
for (i; i < formElements.length; i++) {
if (formElements[i] is FormItem) {
var formItem:FormItem = formElements[i];
var itemElements:Array = formItem.getChildren();
for (j;j<itemElements.length;j++) {
//If form item is a checkbox, check if the box is checked!
if (itemElements[j] is CheckBox) {
var tmpBox:CheckBox = itemElements[j];
if (tmpBox.selected) {
//random stuff
}
}
}
}
}
//Send event with roleIds!
//More random stuff
}
我已经尝试了各种方法来确保循环正常工作并且确实如此:它循环通过适当数量的 FormItem 元素并检索适当数量的 childrenElements。除了循环通过添加的最后一个 FormItem 时,它只是不将任何子项识别为 CheckBox。如果我使用 flash.utils.getQualifiedClassName(itemElements[j]) 来找出其他 FormItem 子项是什么,它会返回一个空字符串。
我究竟做错了什么?