Flex Instantiated Object - ждать созданияComplete - PullRequest
0 голосов
/ 12 ноября 2009

У меня есть простой компонент, который я создал, который я создаю в своей основной программе следующим образом:

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

Я получаю сообщение об ошибке " Невозможно получить доступ к свойству или методу пустой ссылки на объект " во второй строке, потому что newMessage не был полностью создан до нажатия второй строки кода, пытаясь установить мое "тело" "текст textarea. Я знаю, что могу создать обработчик событий creationComplete, но нет ли более простого способа сделать это?

Ответы [ 2 ]

2 голосов
/ 12 ноября 2009

Не иметь доступа к подкомпонентам вообще.

Вместо этого установите обычные старые свойства для вашего компонента. Пусть компонент связывает эти значения с визуальными компонентами.

Например:

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.

0 голосов
/ 12 ноября 2009

Я могу рекомендовать создать все дочерние элементы в вашем компоненте, переопределив метод createChildren (). Это гарантирует, что все дети будут созданы. Больше здесь и здесь

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

Спасибо Майклу Брюеру-Дэвису за комментарий

...