Отредактированный ответ:
ОК, думаю, я вижу проблему.
Вы добавляете свои элементы управления данными в FormItems и добавляете их в форму.Но затем вы перебираете дочерние элементы формы, как если бы они были элементами управления данными, а не FormItems.
Не комментируя оставшуюся часть кода, посмотрите, что делает эта обновленная функция для извлеченияэлементы управления данными:
private function saveToDb():void
{
var formItems:Array = myform.getChildren();
for each (var item:FormItem in formItems)
{
var itemChildren:Array = item.getChildren();
for each (var control:UIComponent in itemChildren)
{
if (control is TextInput)
{
var text:String = Object(item).text;
Alert.show("TextInput");
}
else if (control is DateField)
{
var date:Date = DateField(item).selectedDate;
Alert.show("Date");
}
}
}
Вы также можете удалить переменную formItemArray, она не нужна, поскольку мы получаем список дочерних элементов из Form и FormItems.
Исходный ответ:
Если вы сохраняете ссылку на каждый из элементов динамической формы в массиве, вы можете перебирать каждый из них в вашей функции getMyFormData()
.
например
protected var formItems:Array = new Array();
// Other class stuff here...
var ti:TextInput = new TextInput();
ti.id = Application.application.designList.getItemAt(i).component;
formItems.push(ti); // Add item to array.
fm.addChild(ti);
var ta:TextArea = new TextArea();
ta.id = Application.application.designList.getItemAt(i).colName;
formItems.push(ta); // Add item to array.
fm.addChild(ta);
var df:DateField = new DateField();
df.id = Application.application.designList.getItemAt(i).component;
formItems.push(df); // Add item to array.
fm.addChild(df);
myform.addChild(fm);
<mx:button click="getMyformData()"/>
private function getMyformData()
{
//How to get the myform Data dynamically here after validations... ? &
for each (var item:UIComponent in formItems)
{
if (item is TextInput || item is TextArea)
{
// Cast to Object to access the 'text' property without the compiler complaining.
var text:String = Object(item).text;
// Do something with the text...
}
else if (item is DateField)
{
var date:Date = DateField(item).selectedDate;
// Do something with the date...
}
// Insert additional type checks as needed.
}
}
Вам придется самостоятельно решить, что делать с данными:)
Если вы используете отдельный список, убедитесь, что вы очищаете массив formItems
, когдавы закончили с этим, поэтому у вас нет ссылок на элементы, которые хранят их в памяти без необходимости.
Вместо того, чтобы хранить отдельный массив элементов формы, вы также можете перебирать дочерние элементы в fm
контейнер.Возможно, вам придется сделать некоторые предположения относительно детей, к которым вы будете обращаться, но похоже, что вы контролируете всех добавляемых детей, так что это не проблема.
Надеюсь, это поможет ...
:)