Метод createChildren вызывается до оценки логики скобок MXML компонента - PullRequest
0 голосов
/ 16 марта 2010

У меня есть следующий MXML:

<mx:Script>
    var someBoolean:Boolean = determineSomeCondition();
</mx:Script>

....

<foo:MyComponent somePropertyExpectingIDataRenderer="{
                                    someBoolean
                                    ? new Component1ThatImplementsIDataRenderer()
                                    : new Component2ThatImplementsIDataRenderer()
                                                     }">        
</foo:MyComponent>

Я также переопределил функцию createChildren ():

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

    //do something with somePropertyExpectingIDataRenderer
}

Моя проблема в том, что createChildren () вызывается до оценки логики волнистых скобок, поэтому в createChildren () somePropertyExpectingIDataRenderer имеет значение null.

Однако, если я пропущу компонент через MXML, вот так:

<foo:MyComponent>
    <bar:somePropertyExpectingIDataRenderer>
        <baz:Component1ThatImplementsIDataRenderer/>
    </bar:somePropertyExpectingIDataRenderer>
</foo:MyComponent>

Затем, когда вызывается метод createChildren (), это же свойство не равно нулю. Это должно произойти, и если да, то какие другие обходные пути я должен рассмотреть?

1 Ответ

1 голос
/ 16 марта 2010

Вам нужно подождать, пока ваш компонент пройдет первый этап аннулирования, чтобы получить доступ к значению по умолчанию, установленному в вашем MXML. Это происходит сразу после вызова createChildren (), когда отправлено событие инициализации вашего компонента.

Вот как бы я это сделал:

public function set myProperty(value:IDataRenderer):void
{
    if (_myProperty != value)
    {
        myPropertyChanged = true;
        _myPropert = value;
        invalidateDisplayList();
    }
}



protected override function updateDisplayList(unscaledWidth:Number,
                                              unscaledHeight:Number):void
{
    super.updateDisplayList(unscaledWidth, unscaledHeight);

 ...

    if (myPropertyChanged )
        doWhateverYouNeedToDo(); 



}

(Конечно, в этом примере предполагается, что изменение вашего свойства требует перерисовки)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...