2010-02-08 57 views
1

在我的應用程序的一個區域中,我創建了一個在循環中使用actionscript構建自身的顯示。 (在我的實際應用程序中有一個LOT嵌套的孩子和我的功能可能正在尋找任何這些孩子)在該AS我分配每個項目的ID,但當我試圖通過它的ID訪問該項目失敗。是什麼賦予了?以及我如何才能完成查找UI組件而不必瞭解所有可能的父母?我無法弄清楚如何通過它們的ID訪問項目如果我動態創建它們

這是我正在做的一個簡單的例子。點擊該按鈕會失敗,錯誤

ReferenceError: Error #1069: Property myPanel3 not found on Test and there is no default value.

<?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> 

回答

2

試試這個:

<?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");  

嵌套 - 你應該創建一個字典(例如,如果您需要在不搜索子組件的情況下訪問自定義對象,則使用「名稱」 - 「對象引用」對的相關數組)。

+0

雖然這將工作,我需要一種方式來訪問面板而不知道VBoxes ID,名稱,或者即使它存在。就像我說過的,我的實際應用比樣本複雜得多,我想要一個更清潔的方法,然後必須通過所有父級。 – invertedSpear 2010-02-08 17:16:35

+0

檢查最後一段,我不認爲有這樣的內置存儲。或者,您可以每次都瀏覽對象樹。 – 2010-02-08 17:19:49

+0

字典是一個好主意,從來沒有真正想過做過類似之前的事情,有點像自己的IDing。任何想法爲什麼分配ID的行爲不起作用? – invertedSpear 2010-02-08 17:24:33

相關問題