我有一个我创建的简单组件,我在我的主程序中实例化它,如下所示:
newMessage = new MessageDetail();
newMessage.body.text = "Hello World";
我在第二行收到错误“无法访问空对象引用的属性或方法”,因为在尝试设置“正文”文本区域的文本的第二行代码之前没有完全创建 newMessage。我知道我可以构建一个“creationComplete”事件处理程序,但是没有更简单的方法来做到这一点吗?
我有一个我创建的简单组件,我在我的主程序中实例化它,如下所示:
newMessage = new MessageDetail();
newMessage.body.text = "Hello World";
我在第二行收到错误“无法访问空对象引用的属性或方法”,因为在尝试设置“正文”文本区域的文本的第二行代码之前没有完全创建 newMessage。我知道我可以构建一个“creationComplete”事件处理程序,但是没有更简单的方法来做到这一点吗?
根本不要访问子组件。
而是在您的组件上创建常规的旧属性。让组件将这些值绑定到可视组件。
例如:
我的组件.MXML:
<mxml blah blah blah>
<script>
[Bindable] public var bodyText;
</scipt>
<mx:TextArea text="{bodyText}" />
</mxml>
在您的代码中:
myComponent = new MyComponent()
myComponent.bodyText = "Hello World!";
总的来说,我相信子组件默认是公开的在 Flex 中是一个巨大的错误。
我可以建议通过覆盖方法 createChildren() 在您的组件中创建所有子项。它将确保所有孩子都被实例化。更多here和here
public class MessageDetail()
{
// ...
private var body:TextArea;
// ...
protected override function createChildren():void
{
super.createChildren();
body = new TextArea();
addChild(body);
}
编辑:
newMessage = new MessageDetail();
addChild(newMessage); // During this step all children will to be initialized
newMessage.body.text = "Hello World";
感谢 Michael Brewer-Davis 的评论