我希望有人可以帮助我......
我正在尝试为问卷模块构建动态表单。在以前的一些帖子的基础上,我使用类似于问题“How to generate a form(<mx:form>) dynamically in flex?”的过程,我已经设法证明了扩展XML以包括日历,组合框等的事实。
我的问题是现在需要从ArrayCollection而不是从xml文件中获取数据。我想循环通过AC,其中type =“text”呈现textinput字段,其中type =“calendar”呈现日历等等。
到目前为止,我的代码只是查看textinput字段(对所有评论都很抱歉;)是: -
[Bindable]
public var AC:ArrayCollection = new ArrayCollection( [
{type:'text', direction:'horizontal', tooltip:'test tooltip', label:'my textbox label', id:'1'},
{type:'text', direction:'horizontal', tooltip:'another tooltip', label:'another label', id:'2'}
]);
private function init():void
{
var form:Form = new Form();
for each(var elements:String in AC)
{
switch( elements.@type.toString())
{
case "text":
var fi:FormItem = new FormItem();
// fi.toolTip = elements.tooltip.toString();
// fi.required = getglobalprofile.required.toString();
// fi.direction = getglobalprofileb[i].@direction;
var li:Label = new Label();
// li.text = getglobalprofileb[i].@label;
// li.width = 100;
var ti:TextInput = new TextInput();
ti.text = "test";
ti.width = 200;
form.addChild(fi);
fi.addChild(li);
fi.addChild(ti);
// break;
}
}
this.addChild( form);
}
]]>
</mx:Script>
<!-- Data grid added just to check that AC getting data-->
<mx:DataGrid id="profile" selectedIndex="1" dataProvider="{AC}" width="100%" height="50%" />
<mx:Form id="form" name="form">
</mx:Form>
如果您对工作的xml版本感兴趣(仅渲染),请告诉我,我也会发布此内容
答案 0 :(得分:0)
我找到了这个问题的第一部分的答案,即使用RO调用向DB提交简单请求来呈现表单。
下一个问题是当我不“知道”字段ID,有多少字段或字段类型时,如何保存表单.........
另一篇文章暗示了!
希望这对某人有用。
[Bindable] public var getglobalprofileb:ArrayCollection;
public function init(event:ResultEvent):void {
getglobalprofileb = event.result as ArrayCollection;
var form:Form = new Form();
for each(var elements:Object in getglobalprofileb)
{
switch(elements.type.toString())
{
case "text":
var fi:FormItem = new FormItem();
fi.toolTip = elements.tooltip.toString();
fi.required = elements.required;
fi.direction = elements.direction;
var li:Label = new Label();
li.text = elements.label;
li.width = 100;
var ti:TextInput = new TextInput();
ti.text = elements.default_text.toString();
ti.width = 200;
ti.id = elements.id;
form.addChild(fi);
fi.addChild(li);
fi.addChild(ti);
break;
case "int":
break;
case "textarea":
var fa:FormItem = new FormItem();
fa.toolTip = elements.tooltip;
fa.required = elements.required;
fa.direction = elements.direction;
var la:Label = new Label();
la.text = elements.label;
la.width = 100;
var ta:TextArea = new TextArea();
ta.text = elements.default_text;
ta.id = elements.id;
ta.width = 200;
ta.height = 100;
form.addChild(fa);
fa.addChild(la);
fa.addChild(ta);
break;
case "int":
break;
case "DateField":
var fdf:FormItem = new FormItem();
fdf.toolTip = elements.tooltip;
fdf.required = elements.required;
fdf.direction = elements.direction;
var ldf:Label = new Label();
ldf.text = elements.label;
ldf.width = 100;
var tdf:DateField = new DateField();
tdf.formatString="DD/MM/YYYY";
tdf.width = 200;
tdf.id = elements.id;
form.addChild(fdf);
fdf.addChild(ldf);
fdf.addChild(tdf);
break;
case "int":
break;
case "combobox":
var fcb:FormItem = new FormItem();
fcb.toolTip = elements.tooltip;
fcb.required = elements.required;
fcb.direction = elements.direction;
var lcb:Label = new Label();
lcb.text = elements.label;
lcb.width = 100;
var tcb:combobox = new ComboBox();
tcb.id = elements.id;
tcb.width = 200;
var datas:String = elements.Datas;
var arr:ArrayCollection = new ArrayCollection (
datas.split(",")
);
tcb.dataProvider = arr ;
form.addChild(fcb);
fcb.addChild(lcb);
fcb.addChild(tcb);
break;
case "int":
break;
case "HSlider":
var fhs:FormItem = new FormItem();
fhs.toolTip = elements.tooltip;
fhs.required = elements.required;
fhs.direction = elements.direction;
var lhs:Label = new Label();
lhs.text = elements.label;
lhs.width = 100;
var ths:HSlider = new HSlider();
ths.tickInterval = 10;
ths.liveDragging = true;
ths.snapInterval = 1;
ths.width = 200;
ths.id = elements.id;
form.addChild(fhs);
fhs.addChild(lhs);
fhs.addChild(ths);
break;
case "int":
break;
case "CheckBox":
var fchb:FormItem = new FormItem();
fchb.toolTip = elements.tooltip;
fchb.required = elements.required;
fchb.direction = elements.direction;
var lchb:Label = new Label();
lchb.text = elements.label;
lchb.width = 100;
var tchb:CheckBox = new CheckBox ();
tchb.id = elements.id;
form.addChild(fchb);
fchb.addChild(lchb);
fchb.addChild(tchb);
break;
case "int":
break;
case "NumericStepper":
var fns:FormItem = new FormItem();
fns.toolTip = elements.tooltip;
fns.required = elements.required;
fns.direction = elements.direction;
var lns:Label = new Label();
lns.text = elements.label;
lns.width = 100;
var tns:NumericStepper = new NumericStepper ();
tns.id = elements.id;
form.addChild(fns);
fns.addChild(lns);
fns.addChild(tns);
break;
case "int":
break;
case "Richtext":
var frte:FormItem = new FormItem();
frte.toolTip = elements.tooltip;
frte.required = elements.required;
frte.direction = elements.direction;
var lrte:Label = new Label();
lrte.text = elements.label;
lrte.width = 100;
var trte:RichTextEditor = new RichTextEditor ();
trte.width = 400;
trte.id = elements.id;
form.addChild(frte);
frte.addChild(lrte);
frte.addChild(trte);
break;
case "int":
break;
}
}
this.addChild( form);
// form.id = 'demographics';
}