Flex:视图更改后的调用方法

时间:2011-11-30 00:50:13

标签: actionscript-3 flex flex4 mxml flex4.5

在我的应用程序中,我有一个viewstack,我正在使用selectedChild属性通过actionscript进行更改。我遇到的问题是我想调用组件中的方法,该组件现在是视图堆栈中的选定子项,在我将其指定为子项后,它给了我“无法访问null对象的属性或方法”参考。”有没有什么方法可以在不将creationPolicy更改为all的情况下完成这项工作?

的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 个答案:

答案 0 :(得分:1)

在访问其子级之前,尝试在ViewStack实例(pm_viewstack.validateNow()或pm_viewstack.validateDisplayList())上调用.validateNow()或.validateDisplayList()方法。但我不确定它是否有助于儿童创造政策。

答案 1 :(得分:0)

问题是ViewStack在首次分配给selectedChild之前不会创建子项。这节省了内存,因为用户可能无法在运行时访问每个可能的页面。这是默认行为。大多数人只是将creationPolicy更改为预先实例化所有子项,从而使内存节省无效。另一种方法是在每个子节点上注册creationComplete事件侦听器。这样,您可以在创建子项后恢复算法。这可以保持您节省的内存,并允许您在创建子项后继续。要记住的是,每次选择selectedChild时都不会运行它。但是,您可以通过一些简单的检查来轻松解决这个问题。