MXML类初始化顺序

时间:2011-08-04 14:42:19

标签: flex actionscript components initialization mxml

我在Flex 4中编写了一些自定义组件,并且几次遇到这个问题。

var myForm:MyForm = new MyForm;
myForm.SetData(data);
addElement(myForm);

现在想象一下,我从Panel或VGroup(或任何其他容器)的非构造函数调用这些函数。令人讨厌的是,在MyForm.SetData()期间,并非所有声明的myForm字段都已初始化。如:

<s:VGroup id="dataGroup">

如果我的SetData() - 函数想要访问dataGroup(因为.addElement()的原因是刚收到的数据),它只会因为nullpointer异常而失败,因为还没有创建dataGroup,尽管这是在构造函数。如何保证表格被完全初始化?

2 个答案:

答案 0 :(得分:3)

监听creationComplete事件并在事件的处理程序中添加组件是一种方法。这就是Sam DeHaan所建议的。

另一种方法是覆盖createChildren()功能。这是创建和添加组件的所有子组件的函数。代码看起来像这样:

override public function createChildren():void
{
    super.createChildren();

    var myForm:MyForm = new MyForm;
    // Note that data may be null here, best to 
    // override commitProperties() to set it.
    myForm.SetData(data);   
    addElement(myForm);
}

docs on the component lifecycle将提供有关此主题的大量详细信息。

答案 1 :(得分:1)

除非我误解你的问题,否则

您应该在您需要定义的容器上的 creationComplete 回调中将运行此空指针异常的代码放入。