【问题标题】:Assign Xml Values to dynamically created components将 Xml 值分配给动态创建的组件
【发布时间】:2010-10-05 10:03:05
【问题描述】:

xml 值存储在 'arr' 数组集合中。根据存储的数组的长度,创建下面描述的组件并将这些值动态分配给相关组件。

例如:

AdvanceSearch.mxml 是一个组件,另一个组件是AdvanceSearchAtom.mxml。在“advanceSearchAtom”中有一些子组件,如文本框、组合框等。我们可以在'AdvanceSearch.mxml'中添加许多advancedSearchAtom.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); 
}

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

【问题讨论】:

    标签: apache-flex flash actionscript-3 serialization flex3


    【解决方案1】:

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

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

    我说的对吗?

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

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

    使用数据绑定:

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

    【讨论】:

    • 感谢您给出这个精彩的答案。希望这有助于 mw 解决我的问题。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 2013-07-24
    • 1970-01-01
    相关资源
    最近更新 更多