Распространение событий Flex - PullRequest
0 голосов
/ 21 апреля 2010

Я пытаюсь запечатлеть событие и не могу. Пожалуйста, посмотрите здесь: http://www.pata.ro/FlexTest/ Синий прямоугольник - родитель, а два других - дети. Если я переверну ребенка (красного или зеленого), я все еще над синим (RollOut не сработал для синего). Я сделал зеленый прямоугольник немного прозрачным, чтобы вы могли видеть, что он над красным. Когда я помещаю курсор на зеленый в месте, где он находится над красным, я получаю BlueRollOver, GreenRollOver, RedRollOut. То, что я пытаюсь сделать, это получить красный RollOver, даже если он находится под зеленым. Как родитель захватывает RollOver, даже если я старше одного из его детей. Или наоборот. Итак, как я могу распространить событие вниз на элемент под тем, на который наведен указатель мыши?

Спасибо


Ниже у меня есть мой код. Слушатели событий были объявлены в MXML, поэтому я переписал их для красного прямоугольника, чтобы добавить аргумент useCapture. Если я установлю для useCapture значение TRUE, красный прямоугольник не будет захватывать события, где бы я ни находился. Если я установил его в false, он будет работать как раньше. Итак, как я могу использовать этот аргумент?

<?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"
               applicationComplete="init()">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <fx:Script>
        <![CDATA[
            private function init():void
            {
                gRed.addEventListener(MouseEvent.ROLL_OVER,RedRollOver,true);
                gRed.addEventListener(MouseEvent.ROLL_OUT,RedRollOut,true);
            }

            private function BlueRollOver(ev:Event):void
            {
                idBlue.text="RollOver";
            }
            private function BlueRollOut(ev:Event):void
            {
                idBlue.text="RollOut";
            }
            private function RedRollOver(ev:Event):void
            {
                idRed.text="RollOver";
            }
            private function RedRollOut(ev:Event):void
            {
                idRed.text="RollOut";
            }
            private function GreenRollOver(ev:Event):void
            {
                idGreen.text="RollOver";
            }
            private function GreenRollOut(ev:Event):void
            {
                idGreen.text="RollOut";
            }
        ]]>
    </fx:Script>
    <s:Group id="gBlue" x="114" y="94" width="404" height="301" rollOver="BlueRollOver(event)" rollOut="BlueRollOut(event)">
        <s:Rect width="100%" height="100%">
            <s:fill>
                <s:SolidColor color="#0000CC"/>
            </s:fill>
        </s:Rect>
        <s:Group id="gRed" x="140" y="101" width="230" height="114">
            <s:Rect width="100%" height="100%">
                <s:fill>
                    <s:SolidColor color="#EE0000"/>
                </s:fill>
            </s:Rect>
        </s:Group>
        <s:Group id="gGreen" x="39" y="20" width="200" height="200" rollOver="GreenRollOver(event)" rollOut="GreenRollOut(event)">
            <s:Rect width="100%" height="100%" alpha="0.6">
                <s:fill>
                    <s:SolidColor color="#00EE00"/>
                </s:fill>
            </s:Rect>
        </s:Group>
    </s:Group>
    <s:Label x="535" y="94" text="Blue" color="#0000CC" width="149" id="idBlue"/>
    <s:Label x="535" y="114" text="Red" color="#EE0000" width="173" id="idRed"/>
    <s:Label x="535" y="137" text="Green" color="#00EE00" width="173" id="idGreen"/>
</s:Application>

Ответы [ 2 ]

0 голосов
/ 21 апреля 2010

Это связано с тем, что зеленый и красный прямоугольники являются братьями и сестрами, события могут вспыхнуть, только если есть родительская / дочерняя иерархия. Используйте флаг useCapture на красном прямоугольнике.

0 голосов
/ 21 апреля 2010

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

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