0

作成した単純なコンポーネントがあり、メイン プログラムで次のようにインスタンス化します。

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

「本文」テキストエリアのテキストを設定しようとするコードの 2 行目に到達する前に newMessage が完全に作成されていなかったため、2 行目に「null オブジェクト参照のプロパティまたはメソッドにアクセスできません」というエラーが表示されます。「creationComplete」イベント ハンドラを作成できることはわかっていますが、これを行う簡単な方法はありませんか?

4

2 に答える 2

2

サブコンポーネントには一切アクセスしないでください。

代わりに、コンポーネントに通常の古いプロパティを作成してください。コンポーネントにこれらの値をビジュアル コンポーネントにバインドさせます。

例えば:

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 では大きな間違いだったと思います。

于 2009-11-12T18:38:12.980 に答える
0

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";

コメントをくれたMichaelBrewer-Davisに感謝します

于 2009-11-12T17:28:37.367 に答える