2010-09-21 255 views
0

我想調用一個函數並傳遞一些屬性給它,但它是抱怨我試圖將目標對象爲null。任何人都可以看到我要去哪裏嗎?返回值而不是null

<mx:ViewStack id="vs" width="100%" height="100%" y="53"> 
    <mx:Canvas id="view1" label="Community" width="100%" height="100%" backgroundColor="#ff9900" showEffect="WipeDown" hideEffect="WipeUp"> 
     <mx:Label text="Community"/> 
    </mx:Canvas> 
    <mx:Canvas id="view2" label="Apps" width="100%" height="100%" backgroundColor="green"> 
     <mx:HTML id="myHTML" width="100%" height="100%" 
     visible="true" 
     paintsDefaultBackground="true" 
     htmlRender="browser_completeHandler(event)" 
     locationChange="browser_locationChangeHandler(event)" 
     complete="browser_completeHandler(event)" /> 
    </mx:Canvas> 
</mx:ViewStack> 


<local:DockBar id="dockbar" horizontalCenter="0" bottom="0" width="100%" height="100" minSize="32" maxSize="80"> 
    <mx:Label visible="false" id="menuLabel" text="Menu" bottom="0" horizontalCenter="0" fontSize="24" color="#ffffff" alpha=".75" /> 
    <mx:Image click="gotoApp('Google','http://www.google.com/')" source="{icon1}" buttonMode="true" useHandCursor="true" toolTip="Nice red" rollOver="turnOn(event)" rollOut="turnOff(event)" /> 
    <mx:Image click="gotoApp('Yahoo','http://www.yahoo.com/')" source="{icon2}" buttonMode="true" useHandCursor="true" toolTip="Cool orange" rollOver="turnOn(event)" rollOut="turnOff(event)" /> 
    </mx:HBox> 
</local:DockBar> 

和功能如下:

private function gotoApp(id:String,url:String):void { 
    vs.selectedChild=view4; 
    trace(myHTML); 
} 

它返回null我第一次單擊圖像然而隨後的嘗試跟蹤的值(我假設,因爲它設置,那麼,就不能當應用程序加載)。任何想法如何在應用程序加載時識別它?

乾杯

回答

1

井「view4」是不是你viewstack的孩子,所以它會當它試圖對它的孩子轉移到拋出一個空指針。

的原因,它不把它第二次可能是由於像

public function set selectedChild(child : Object) : void { 
    if (child == _selectedChild) return; 
    ... 
} 

這是在setter方法很常見的模式。

1

假設「view4」是一個錯字,你的意思是「view2」,你可以將ViewStack中的creationPolicy設置爲「all」。默認情況下,ViewStacks只在創建時初始化第一個視圖,將creationPolicy設置爲「all」會強制堆棧中的所有視圖得到實例化。

1

默認情況下,ViewStack將以文檔順序懶惰地創建其子級,因此只有在加載時可見的第一個子元素(即view1)在您的函數中不會有空id。隨後點擊ViewStack將創建其他視圖(view2,view3和view4),這就是錯誤不再發生的原因。使用selectedIndex屬性,而不是

<mx:ViewStack id="vs" creationPolicy="all" width="100%" height="100%" y="53"> 
    <mx:Canvas id="view1" label="Community" width="100%" height="100%"> 
     ... 
    </mx:Canvas> 
     ... 
    <mx:Canvas id="view4" label="Apps" width="100%" height="100%"> 
     ... 
    </mx:Canvas> 
</mx:ViewStack> 
0

嘗試設置:

所以,你需要修改代碼以包括的creationPolicy = 「all」 來解決這個問題

vs.selectedIndex = 1; 

這樣你」不要失去推遲實例化的好處。