flex 4.6使用addElement()时添加或更改元素名称

时间:2012-08-31 05:14:36

标签: flex module flex4 element addeventlistener

flex 4.6

我正在使用addElement,如下所示。但是我注意到,在检查元素时,元素的名称后缀为数字,因此加载的元素名称newMod变为newMod10(数字是可变的)。如果我想removeElement(),我不知道正确的getChildByName()会是什么,所以getChildByName("newMod")会失败。

所以我的Q是

  1. 如何使用唯一名称添加元素()
  2. 如何找到我刚刚添加的元素的名称,以便我可以通过nameXX
  3. 来引用

    THX 领域

    /*  load module */
    /*   creationComplete="loadNewMod('modToLoad','A' )
    public function loadNewMod(modName,evtTyp):void {
       info = ModuleManager.getModule(modName);
       var self:Object = this;
       var meh =  "modEventHandler"+(evtTyp);
           info.addEventListener(ModuleEvent.READY, function(e:ModuleEvent){
            self[meh](e)
                });
       info.load(null, null, null, moduleFactory);
       }
    
    private function modEventHandlerA(e:ModuleEvent):void {
       vg1.addElement(info.factory.create() as IVisualElement);
      }
    
    
    <s:Group id="vg1" horizontalCenter="0" verticalCenter="0">
        <s:Label id="newLabel" />
    </s:Group>
    

    [编辑] 通过打破我添加了一个似乎有用的ID的功能

    private function modEventHandlerA(e:ModuleEvent,fcall):void {
       var newID = info.factory.create();
       newID.name = "myElem";
       vg1.addElement(hh as IVisualElement);
       }
    

1 个答案:

答案 0 :(得分:0)

最好的方法是将name属性附加到对象并执行for循环。它效率低下,但在AS3中设置ID标签似乎无法正常工作。

info.name = "info1";


for ( var i:Number = 0; i < vg1.numElements; i++ ) {
     if ( ( vg1.getElementAt(i) as UIComponent).name == "info1" ) {
         vg1.removeElementAt(i);
         break;
     }
}

我没有检查信息是否具有name属性,但这样就可以了。或者,你可以使用与id标签完全相同的方法,除了使用indexOf(“info1”)&gt; = 0,而不是.name ==“info1”