metodo di chiamata dopo il cambio ViewStack: Flex
-
25-10-2019 - |
Domanda
Nella mia domanda ho un ViewStack che sto cambiando tramite ActionScript mediante l'attributo selectedChild. Il problema che ho incontrato è che voglio chiamare un metodo nel componente che è ora il bambino selezionato nel ViewStack, subito dopo assegno che sia il bambino che mi dà un "Impossibile accedere a una proprietà o un metodo di un oggetto null riferimento." C'è qualche modo che io possa fare questo lavoro senza cambiare la creationPolicy a tutti?
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>
Soluzione
Prova a chiamare .validateNow () o .validateDisplayList () metodo su propria istanza ViewStack (pm_viewstack.validateNow () o pm_viewstack.validateDisplayList ()) prima accesing il suo bambino. Ma io non sono sicuro se sarebbe d'aiuto con la politica di creazione del bambino.
Altri suggerimenti
Il problema è ViewStack non crea i bambini fino a che non vengono assegnati a selectedChild prima. Ciò consente di risparmiare memoria in quanto l'utente potrebbe non accedere ogni possibile pagina durante il runtime. Questo è il comportamento predefinito. La maggior parte delle persone semplicemente cambiare il creationPolicy di pre-istanziare tutti i bambini annullando così il risparmio di memoria. L'alternativa è quella di registrare un listener di eventi creationComplete su ogni bambino. In questo modo è possibile riprendere l'algoritmo volta che il bambino è stato creato. Che mantiene la risparmio di memoria che si ottiene, e ti permette di riprendere dopo che il bambino è stato creato. Le cose da tenere a mente è che non è eseguito ogni volta che viene assegnato selectedChild troppo. Ma, si può facilmente aggirare che, con qualche semplice se i controlli.