您没有提到它,但我想问题是您在以下几行中遇到空引用错误 (1009):
adv.field.text = arr[i].field;
adv.value.selectedIndex = arr[i].value;
我说的对吗?
这是因为尚未创建 field 和 value。根据默认组件实例化,Flex 仅在需要时创建子组件 - 即显示时。
您可以监听AdvanceSearchAtom 组件的creationComplete 事件并从那里更新值;或者在AdvanceSearchAtom 类中有Binadble 公共变量,将它们绑定到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;
}
使用数据绑定:
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;
}