2010-01-11 100 views
0

我在flex項目中有兩個mxml文件: 但是,當我跟蹤a.cBtn時,它是空的。 爲什麼要這樣?Flex:實例化mxml組件的問題

test.mxml:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="runIt()"> 
<mx:Script> 
<![CDATA[ 
    public function runIt():void 
    { 
    var a:abc = new abc(); 
    trace(a.cBtn);//a.cBtn is null here 
    } 
]]> 
</mx:Script> 
</mx:Application> 

而且,abc.mxml:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300"> 
<mx:Button x="108" y="73" label="Button" id="cBtn"/> 

</mx:Canvas> 

回答

0

這裏的基本問題是,在Flex中,不創建一個給定的柔性容器組件的子組件,直到該容器被初始化。在將添加到顯示列表後,初始化過程開始。如上所述,CREATION_COMPLETE事件在完成初始化並且實例化子元素後觸發,因此您可以安全地訪問此處的子元素。

這非常難看,但是如果您在將組件添加到顯示列表之前絕對需要訪問組件的子組件,則可以在容器上調用「initialize()」。

public function runIt():void 
{ 
    var a:abc = new abc(); 
    trace(a.cBtn);//a.cBtn is null here 
    a.initialize(); 
    trace(a.cBtn);//a.cBtn is not null here 
} 
0

你需要等待creationcomplete事件。

public function runIt():void 
{ 
    var a:abc = new abc(); 
    a.addEventListener(FlexEvent.CREATION_COMPLETE, traceIt) 
    trace(a.cBtn);//a.cBtn is null here 
} 
private function traceIt(e:Event):void 
{ 
    trace(a(e.target).cBtn) 
} 
+0

將creationPolicy在這裏有什麼作用? – 2010-01-15 17:26:32

+1

creationpolicy是您在視圖中隱藏組件時使用的參數,例如在3個選項卡選項卡導航器中,第二個和第三個選項卡未初始化,直到您點擊它們,ubless設置了creationpolicy =「all」,所以在上面的情況下添加按鈕它不會幫助。 – Eran 2010-01-16 06:29:25