0

我有一个 spark Group 容器,但它的所有子组件都是 MX 组件。我需要在容器初始化时对 MX 组件进行一些操作。我试图将操作放在commitProperties函数中,但子组件仍然为空。我尝试将它们移到childrenCreated函数中,但它们仍然为空。我可以使用什么功能来处理组件?谢谢。

protected override function commitProperties():void
        {
            var defaultFinishedDate:Date=new Date();
            defaultFinishedDate.date--;
            includeFinishedDateSelector.selectedDate=defaultFinishedDate;
        }

在这个includeFinishDateSelector函数中是 null,因此我得到一个运行时错误。它定义为:

<mx:DateField id="includeFinishedDateSelector" formatString="{GeneralUtils.DATE_FORMAT_STRING}" 
    enabled="{includeFinishedCheckBox.selected}" width="18%"/>

正如我所说,它的容器是 spark Group 容器。

4

3 回答 3

0

感谢任何试图提供帮助的人。最后,我通过将 MX 组件的直接容器(父级)更改为 spark 容器(它最初是 spark 容器中的 MX 容器)解决了这个问题。

于 2013-08-20T07:23:24.543 回答
0

您也可以尝试将您的代码包装在 callLater 中,它实际上会将其排队以在下一次运行时运行。所以在 creationComplete 中尝试以下操作:

callLater(function():*{
    var defaultFinishedDate:Date=new Date();
    defaultFinishedDate.date--;
    includeFinishedDateSelector.selectedDate=defaultFinishedDate;
});

它不是很优雅,但它应该可以工作。

于 2013-08-15T14:14:40.490 回答
0

我本来希望 Flex 生命周期方法createChildren()是您可以进行操作的地方。但是你只想在超类执行后才做这项工作createChildren()

override protected function createChildren():void
{
    super.createChildren();
    // now do your thing
}

另一件事是,在commitProperties()您上面显示的方法中,您没有调用超类方法。这是一个很大的禁忌。该commitProperties()方法由 Flex 框架 AFTER 调用createChildren()。所以从理论上讲,你的方法commitProperties()应该是有效的——你可能会返回并super.commitProperties()在该代码中调用,然后再试一次。

最后,如果这些都不起作用,可能是因为 Flex 在 MXML 容器中实例化子对象的方式。因此,一种肯定会奏效的方法是从Group容器中侦听 Flex 生命周期事件。当creationComplete事件由 调度时Group,保证所有的孩子都存在。

于 2013-08-04T17:55:29.973 回答