我在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,尽管这是在构造函数。如何保证表格被完全初始化?
答案 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 回调中将运行此空指针异常的代码放入。