2011-11-30 42 views
2

在我的應用程序中,我有一個viewstack,它使用selectedChild屬性通過actionscript進行更改。我碰到的問題是,我想調用組件中的一個方法,該組件現在是viewstack中選定的子組件,恰好在我將其指定爲子組件後,它給了我一個「無法訪問空對象的屬性或方法參考。」有沒有什麼方法可以讓我在不改變creationPolicy的情況下完成這項工作?Flex:視圖堆棧更改後的調用方法

的ActionScript:

public function displayTaskDashboard(evt:Event):void 
    { 
    pm_viewstack.selectedChild = nc_taskDashboard; 
taskDashboard.populateTasks(Globals.currentProject.Project_ID); 
} 

MXML:

<mx:ViewStack id="pm_viewstack" creationPolicy="auto"> 
    <s:NavigatorContent id="nc_projectDashboard"> 
     <components:ProjectDashboard/> 
    </s:NavigatorContent> 
    <s:NavigatorContent id="nc_taskDashboard"> 
     <components:TaskDashboard id="taskDashboard" /> 
    </s:NavigatorContent> 
    <s:NavigatorContent id="nc_taskWizard"> 
     <components:TaskWizard id="taskWizard" /> 
    </s:NavigatorContent> 
</mx:ViewStack> 

回答

1

嘗試調用.validateNow()或.validateDisplayList()在您的ViewStack實例方法(pm_viewstack.validateNow()或pm_viewstack.validateDisplayList( ))在取得其子女之前。但我不確定這是否會有助於兒童創造政策。

+0

工作很棒! –

0

問題是ViewStack不會創建子項,直到它們首先分配給selectedChild。這可節省內存,因爲用戶可能無法在運行時訪問每個可能的頁面。這是默認行爲。大多數人只是簡單地改變creationPolicy來預先實例化所有的孩子,從而減少了內存的節省。另一種方法是在每個孩子上註冊一個creationComplete事件監聽器。這樣,一旦孩子被創建,你就可以恢復你的算法。這可以節省您獲得的內存,並允許您在創建子項後繼續。需要記住的是,它不會在每次分配selectedChild時都運行。但是,您可以通過一些簡單的檢查來輕鬆解決這個問題。