Flex 实例化对象 - 等待创建完成

发布于 2024-08-11 07:55:01 字数 275 浏览 6 评论 0原文

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

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

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

I have a simple component I created which I instantiate in my main program like so:

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

I receive the error "Cannot access a property or method of a null object reference" on the second line because newMessage was not fully created prior to hitting the second line of code trying to set my "body" textarea's text. I know I can build a "creationComplete" event handler, but isn't there a simpler way to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

べ映画 2024-08-18 07:55:01

根本不要访问子组件。

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

例如:

MyComponent.MXML:

<mxml blah blah blah>

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


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

在您的代码中:

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

一般来说,我认为默认情况下公开子组件是 Flex 中的一个巨大错误。

Don't access sub-components at all.

Instead make regular old properties on your component. Have the component bind those values to visual components.

For example:

MyComponent.MXML:

<mxml blah blah blah>

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


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

In your code:

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

In general, I believe sub-components being public by default was a huge mistake in Flex.

止于盛夏 2024-08-18 07:55:01

我建议通过重写方法 createChildren() 来创建组件中的所有子组件。它将确保所有子项都被实例化。更多此处此处

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

I can recommend to create create all children in your component by overriding method createChildren(). It will make sure all children are instantiated. More here and here

    public class MessageDetail() 
    {

        // ...
        private var body:TextArea;
        // ...

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

            body = new TextArea();
            addChild(body);
        }

EDIT:

newMessage = new MessageDetail();
addChild(newMessage); // During this step all children will to be initialized
newMessage.body.text = "Hello World";

Thanks to Michael Brewer-Davis for comment

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文