将Xml值分配给动态创建的组件

时间:2010-10-05 10:03:05

标签: flex flash actionscript-3 serialization flex3

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); 
}

如果有人遇到这类问题,请告诉我。如果有任何相关的链接是明显的。提前致谢

1 个答案:

答案 0 :(得分:0)

你没有提到它,但我想问题是你在以下几行得到空引用错误(1009):

adv.field.text = arr[i].field; 
adv.value.selectedIndex = arr[i].value;

我是对的吗?

这是因为尚未创建fieldvalue。根据默认组件实例化,Flex仅在需要时才创建子项 - 即,何时显示子项。

您可以收听creationComplete组件的AdvanceSearchAtom事件并从那里更新值;或者在Binadble类中包含AdvanceSearchAtom个公共变量,将它们绑定到field.textvalue.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;
}