代码之家  ›  专栏  ›  技术社区  ›  invertedSpear

如果动态创建项目,我无法确定如何通过其ID访问项目

  •  1
  • invertedSpear  · 技术社区  · 16 年前

    很多 当我为每个项分配一个ID时,我的函数可能会查找这些子项中的任何一个,但是当我尝试通过它的ID访问该项时,它失败了。有什么好处?我如何才能在不了解所有可能的父元素的情况下找到UI组件呢?

    ReferenceError:Error#1069:在测试中未找到属性myPanel3,并且没有默认值。

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init();">
        <mx:Script>
            <![CDATA[
                import mx.containers.Panel;
                private function init():void{
                    var i:uint = 0;
                    for(i = 0; i<10; i++){
                        var loopPanel:Panel = new Panel;
                        loopPanel.title = i.toString();
                        loopPanel.id = "myPanel" + i.toString();
                        myVBox.addChild(loopPanel);
                    }
                }
    
                private function clicked():void{
                    var tracePanel:Panel = this["myPanel3"];
                    trace(tracePanel);
                }
            ]]>
        </mx:Script>
        <mx:VBox id="myVBox" x="10" y="10" width="500"/>
        <mx:Button id="myBtn" x="518" y="8" label="Click Me" click="clicked();"/>
    </mx:Application>
    
    1 回复  |  直到 16 年前
        1
  •  2
  •   Robert Bak    16 年前

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init();">
    <mx:Script>
        <![CDATA[
            import mx.containers.Panel;
            private function init():void{
                var i:uint = 0;
                for(i = 0; i<10; i++){
                    var loopPanel:Panel = new Panel;
                    loopPanel.title = i.toString();
                    loopPanel.name = "myPanel" + i.toString();                                 
                    myVBox.addChild(loopPanel);
                }
            }
    
            private function clicked():void{
                var tracePanel:DisplayObject = myVBox.getChildByName("myPanel3");                
                trace(tracePanel.name);
    
            }
        ]]>
    </mx:Script>
    <mx:VBox id="myVBox" x="10" y="10" width="500"/>
    <mx:Button id="myBtn" x="518" y="8" label="Click Me" click="clicked();"/>
    


    两行的更改:

      loopPanel.name = "myPanel" + i.toString();   
    

    和

      var tracePanel:DisplayObject = myVBox.getChildByName("myPanel3");    
    

    -如果需要在不搜索子组件的情况下访问自定义对象,您可能应该创建自定义对象的字典(例如,带有“名称”-“对象引用”对的assocative数组)。

    推荐文章