flex 4 - держать элемент / компонент всегда сверху - PullRequest
0 голосов
/ 29 февраля 2012

Я поместил два пользовательских компонента в приложение flex 4

<preload:PreLoader horizontalCenter="0" verticalCenter="0" fontWeight="bold" fontSize="50" id="preLoader"/>
<util:Debug  top ="0" right="0" id="debug"/>

В соответствии с компонентами заказа, добавленными в MXML, отладка останется на вершине.

Мое намерениевсегда держать компонент Debug сверху

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

   FlexGlobals.topLevelApplication,addElement(someotherflexcomp);

Теперь, каждый раз, когда я добавляю элемент, нормальное поведение flex / AS заключается в том, что вновь добавленный элемент будет оставаться поверх displaylist.

Итак, я написалфункция в главном приложении, которая должна вызываться при добавлении компонента / элемента в главное приложение.

       public function bringDebuggerFront():void{

            if (numElements > 2){

                swapElementsAt(numElements - 1,numElements - 2);
            }
        }

Идея здесь проста, поменять местами позицию отображения последнего N-го (последнего элемента)) элемент с элементом N-1, который будет компонентом Debug, если вызывается при каждом добавлении элемента.

Итак, мне нужно добавить дополнительную строку визмените положение вдовы отладчика следующим образом:

    FlexGlobals.topLevelApplication,addElement(someotherflexcomp);
    FlexGlobals.topLevelApplication.bringDebuggerFront();

Пока это не большая проблема, потому что, в настоящее время я добавляю только три компонента во время выполнения, но я мог бы добавить больше в будущем и больше, мне придетсяработайте больше (комментируйте или удаляйте этот код, разбросанный по нескольким местам), чтобы отключить эту функцию, которая предназначена только для отладки.

Чтобы избежать этого, я добавил add слушатель событий, который предполагается вызывать при каждом добавлении элемента в приложение, но кажется, что он вызывается только для двух компонентов, которыеЯ добавил в mxml, но не вызывается, когда элемент добавляется в приложение, используя addElement () метод

Вот полный код моего основного приложения

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:util="util.*" xmlns:preload="preload.*"
               add="bringDebuggerFront()">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <preload:PreLoader horizontalCenter="0" verticalCenter="0" fontWeight="bold" fontSize="50" id="preLoader"/>
    <util:Debug  top ="0" right="0" id="debug"/>
    <fx:Script>
        <![CDATA[
            import mx.events.FlexEvent;

            public function bringDebuggerFront():void{

                if (numElements > 2){

                    swapElementsAt(numElements - 1,numElements - 2);
                }
            }
        ]]>
    </fx:Script>
</s:Application>

Я даже пытался с добавлено событие, но я думаю, что это не правильно, так как вызывается так много раз, что, как я полагаю, вызывается для каждого внутреннего объекта отображения, а также выдает ошибки, которые я не сделалкопались в деталях

Заранее спасибо за помощь

1 Ответ

2 голосов
/ 29 февраля 2012

Если вы используете Flex 4, вы можете достичь этого с помощью свойства глубины компонентов

...