Где разместить код макета - PullRequest
0 голосов
/ 24 августа 2011

Мне нужен код для запуска в компоненте после того, как все размеры его дочерних элементов известны.Компонент имеет абсолютное расположение.Я думал, что функция measure () моего компонента будет вызываться после того, как были вызваны его детские функции measure (), но, похоже, поскольку она имеет абсолютное расположение, она никогда даже не вызывает measure.

В любом случае, этоХолст и мой override protected function measure():void никогда не запускаются.Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 24 августа 2011

updateDisplayList () вызывается в commitProperties UIComponent. Я полагаю, что это вызывается после того, как размеры дочерних элементов известны, и именно здесь вы должны поместить свой код макета.

measure () не вызывается, когда вы явно устанавливаете ширину и высоту для ваших компонентов. Если у вас есть абсолютное расположение на холсте, но вы не задали ширину и высоту, будет вызвана measure ().

НТН;

Amy

0 голосов
/ 24 августа 2011

Вам не нужно ничего переопределять, просто добавьте слушатель к creationComplete вашего компонента.Это событие «Отправляется, когда компонент завершил построение, обработку свойства, измерение, макет и чертеж».

Пример, где компонент наследует от s: Group

<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300"
     creationComplete="group1_creationCompleteHandler(event)">
<fx:Script>
    <![CDATA[
        import mx.events.FlexEvent;

        protected function group1_creationCompleteHandler(event:FlexEvent):void
        {
            //TODO add code here
        }

    ]]>
</fx:Script>
</s:Group>
...