2013-08-04 23 views
0

我有一个火花组容器,但其所有子组件都是MX组件。当容器初始化时,我需要对MX组件执行一些操作。我试图将这些操作放在commitProperties函数中,但子组件在那里仍然是空的。我试着将它们移动到childrenCreated函数,但它们仍然为空。我可以使用哪些功能来处理组件?谢谢。火花容器中的MX组件为空

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%"/> 

正如我所说,它的容器是火花组容器。

回答

0

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

0

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

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

另一件事是,在commitProperties()方法告诉你上面,你是不是调用父类方法。这是一个很大的禁忌。 Flex框架AFTER createChildren()调用commitProperties()方法。所以从理论上讲,你的方法与commitProperties()应该已经奏效了 - 你可以回过头去拨打super.commitProperties()那个代码,然后再去一次。

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

+0

谢谢你的回答。其实我在函数中有'super.commitProperties'调用。我试图缩短我的例子时,错误地删除了它。该函数有几行,但我想专注于与我的问题有关的内容,所以我删除了一些内容。在解析commitProperties之前,我也尝试了'creationComplete'事件,但得到了相同的结果。 'childrenCreated'在'createChildren'之后被调用,所以我想这样也行不通...任何其他的想法都会被赞赏。 – user940016

0

你也可以尝试在callLater中包装你的代码,它基本上将它排队以便在下一次传递时运行。 所以在creationComplete尝试以下操作:

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

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