Flex: вызов метода после изменения стека представления - PullRequest
2 голосов
/ 30 ноября 2011

В моем приложении у меня есть стек просмотра, который я изменяю с помощью Actionscript, используя атрибут selectedChild.Проблема, с которой я сталкиваюсь, заключается в том, что я хочу вызвать метод в компоненте, который теперь является выбранным дочерним элементом в стековом представлении, сразу после того, как я назначил его дочерним, он дает мне «Не удается получить доступ к свойству или методу нулевого объекта»ссылка."Есть ли способ, которым я могу сделать эту работу, не меняя creationPolicy для всех?

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>

Ответы [ 2 ]

1 голос
/ 30 ноября 2011

Попробуйте вызвать .validateNow () или .validateDisplayList () для вашего экземпляра ViewStack (pm_viewstack.validateNow () или pm_viewstack.validateDisplayList ()), прежде чем обращаться к его дочернему элементу.Но я не уверен, поможет ли это с политикой создания детей.

0 голосов
/ 30 ноября 2011

Проблема в том, что ViewStack не создает дочерние элементы, пока они не будут назначены на selectedChild.Это экономит память, поскольку пользователь может не получить доступ ко всем возможным страницам во время выполнения.Это поведение по умолчанию.Большинство людей просто изменяют creationPolicy, чтобы предварительно создать экземпляр всех дочерних элементов, тем самым сводя на нет экономию памяти.Альтернативой является регистрация прослушивателя события creationComplete на каждом дочернем элементе.Таким образом, вы можете возобновить свой алгоритм, как только ребенок будет создан.Это сохраняет экономию памяти, которую вы получаете, и позволяет возобновить работу после создания ребенка.Следует иметь в виду, что он запускается не каждый раз, когда назначается selectedChild.Но вы можете легко обойти это с помощью некоторых простых проверок if.

...