xml值存储在'arr'数组集合中。根据存储的数组的长度,创建下面描述的组件并动态地将这些值分配给相关组件。
例如:
AdvanceSearch.mxml是一个组件,另一个组件是advanceSearchAtom.mxml。在'advanceSearchAtom'中有一些子组件如文本框,组合框等。我们可以在'AdvanceSearch.mxml'中添加许多advanceSearchAtom.mxml。
var container : AdvanceSearch;
var adv : advanceSearchAtom;
for(var i:int=0;i<arr.length;i++) {
adv = new advanceSearchAtom();
adv.field.text = arr[i].field;
adv.value.selectedIndex = arr[i].value;
container.addChild(adv);
}
如果有人遇到这类问题,请告诉我。如果有任何相关的链接是明显的。提前致谢
答案 0 :(得分:0)
你没有提到它,但我想问题是你在以下几行得到空引用错误(1009):
adv.field.text = arr[i].field;
adv.value.selectedIndex = arr[i].value;
我是对的吗?
这是因为尚未创建field
和value
。根据默认组件实例化,Flex仅在需要时才创建子项 - 即,何时显示子项。
您可以收听creationComplete
组件的AdvanceSearchAtom
事件并从那里更新值;或者在Binadble
类中包含AdvanceSearchAtom
个公共变量,将它们绑定到field.text
和value.selectedIndex
,并将xml值分配给循环中的那些变量。
使用创建完成:
public var container:AdvanceSearch;
public var searchItems:Array = [];
public var arr:Array;
//assuming that arr has been initialized with xml values.
var adv:AdvanceSearchAtom;
for(var i:int=0;i<arr.length;i++) {
adv = new AdvanceSearchAtom();
adv.addEventListener(FlexEvent.CREATION_COMPLETE, onAtomCreated);
container.addChild(adv);
searchItems.push(adv);
}
public function onAtomCreated(e:Event):void
{
var adv:AdvanceSearchAtom = e.currentTarget as AdvanceSearchAtom;
if(!adv)
return;
var index:Number = searchItems.indexOf(adv);
adv.field.text = arr[index].field;
adv.value.selectedIndex = arr[index].value;
}
使用数据绑定:
Inside AdvanceSearchAtom.mxml
<mx:TextInput id="field" text="{textValue}"/>
<mx:ComboBox id="value" selectedIndex="{comboIndex}"/>
在AdvanceSearchAtom.mxml的脚本块中
[Bindable]
public var textValue:String;
[Bindable]
public var comboIndex:Number;
var adv:AdvanceSearchAtom;
在AdvanceSearch类中:
for(var i:int=0;i<arr.length;i++) {
adv = new AdvanceSearchAtom();
container.addChild(adv);
adv.field.text = arr[i].field;
adv.value.selectedIndex = arr[i].value;
}