2011-06-30 61 views
0

我已經創建了一個Flash Builder ActionScript 3的項目,其加載在其中包含ComboBox組件閃光CS5創建的外部SWF。AS3 - 添加項目到一個ComboBox加載的SWF

如何動態地添加項目?

mc1['itemList'].addItem({label:"test"}); 

似乎不起作用??

回答

1

,如果你想在運行時加載的SWF中訪問情況下,你可以使用getChildByName方法

Object(MovieClip(__loader.content).getChildByName('itemList')) 

我測試了它使用下面的代碼,它工作正常。我創建了一個包含兩個ComboBox的小型Flash CS5文件。第二個是演示如何實例化加載的swf中定義的類。

鏈接的例子類和Flash CS5文件 http://public.goldsource.de/stackOverflow/ComboBoxTest.zip

package 
{ 
    import flash.display.Loader; 
    import flash.display.MovieClip; 
    import flash.display.Sprite; 
    import flash.display.StageAlign; 
    import flash.display.StageScaleMode; 
    import flash.events.Event; 
    import flash.net.URLRequest; 
    import flash.utils.describeType; 
    import flash.utils.getDefinitionByName; 

    public class ComboBoxTest extends Sprite 
    { 

     private var __loader:Loader = new Loader(); 
     public function ComboBoxTest() 
     { 
      stage.scaleMode = StageScaleMode.NO_SCALE; 
      stage.align = StageAlign.TOP_LEFT;    
      __loader.contentLoaderInfo.addEventListener(Event.COMPLETE,__onComplete); 

      /* 
       Within the ComboBoxContainer.swf you find ComboBox-Component named 'myComboBox'. 
       There is another ComboBox within a MovieClip that is exported as MyComboBoxClass. This is necessary if you 
       want to add more than one ComboBox without loading the swf again. 
      */   
      __loader.load(new URLRequest('assets/ComboBoxContainer.swf')); 
     } 


     private function __onComplete($e:Event):void{ 

      /* You can even access the ComboBox while within Loader. 
       this line adds a new item*/ 
      Object(MovieClip(__loader.content).getChildByName('myComboBox')).addItem({label:"First Box"}); 

      /* 
       I suggest to get rid of the loader. The addChild is not necessary to fetch a reference, 
       i used it to add the ComboBox to the stage. Because addChild returns the reference storing it is 
       possible within the same line. 
      */ 
      var importedComboBox:Object = addChild(MovieClip(__loader.content).getChildByName('myComboBox')); 
      importedComboBox.y = 20; 
      importedComboBox.x = 10; 
      importedComboBox.addItem({label:"Some Item"}); 


      /* 
       By the way, you can also extract the class Definiton. So its possible to instantiate the ComboBox. 

      */ 
      var myComboBoxClass:Class = __loader.contentLoaderInfo.applicationDomain.getDefinition("MyComboBoxClass") as Class; 


      // You can instantiate this class multiple times 
      var mySecondComboBox:Object = addChild(new myComboBoxClass()); 
      mySecondComboBox.y = 60; 
      mySecondComboBox.x = 10; 
      mySecondComboBox.getChildByName('comboBox').addItem({label:"Second Box"}); 


      var myThirdComboBox:Object = addChild(new myComboBoxClass()); 
      myThirdComboBox.y = 100; 
      myThirdComboBox.x = 10; 
      myThirdComboBox.getChildByName('comboBox').addItem({label:"Third Box"}); 
     } 
    } 
}