0

我有一个我创建的简单组件,我在我的主程序中实例化它,如下所示:

newMessage = new MessageDetail();
newMessage.body.text = "Hello World";

我在第二行收到错误“无法访问空对象引用的属性或方法”,因为在尝试设置“正文”文本区域的文本的第二行代码之前没有完全创建 newMessage。我知道我可以构建一个“creationComplete”事件处理程序,但是没有更简单的方法来做到这一点吗?

4

2 回答 2

2

根本不要访问子组件。

而是在您的组件上创建常规的旧属性。让组件将这些值绑定到可视组件。

例如:

我的组件.MXML:

<mxml blah blah blah>

<script>
  [Bindable] public var bodyText;
</scipt>


<mx:TextArea text="{bodyText}" />
</mxml>

在您的代码中:

myComponent = new MyComponent()
myComponent.bodyText = "Hello World!";

总的来说,我相信子组件默认是公开的在 Flex 中是一个巨大的错误。

于 2009-11-12T18:38:12.980 回答
0

我可以建议通过覆盖方法 createChildren() 在您的组件中创建所有子项。它将确保所有孩子都被实例化。更多herehere

    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 的评论

于 2009-11-12T17:28:37.367 回答