stopEventPropagation за пределами текущего компонента - PullRequest
0 голосов
/ 29 марта 2011

У меня есть TextInput внутри средства визуализации искры.Мне нужно отменить некоторое поведение в библиотеке, которую я использую, путем stopPropagation события mouseDown и mouseUp для TextInput.Однако я хотел бы, чтобы сам TextInput обрабатывал такие события нормально - в противном случае переходы курсора к курсору не будут обрабатываться должным образом.Мне стыдно признаться, я не уверен, как это сделать - кажется простым, но я застрял на нем некоторое время.

спасибо!


Редактировать:Хорошо, вот некоторый код, чтобы объяснить, что происходит (хотя это совершенно не связано с тем, что я делаю, поэтому это не точное описание моей конкретной ситуации).Как я упоминал выше, мне нужно иметь возможность остановить распространение mouseDown и mouseUp от TextInput к компоненту вверх по пищевой цепочке - event.stopPropagation () в mouseDown и mouseUp для TextInput делают свое дело.Однако он портит обработку курсора / курсора для самого TextInput.Попробуйте приведенный ниже код с событием.stopPropagation () или без него, и вы увидите, что я имею в виду.

Main

<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2009/03/19/using-a-custom-item-renderer-function-with-the-fxlist-control-in-flex-gumbo/ -->
<s:Application name="Spark_List_itemRendererFunction_test"
               xmlns:fx="http://ns.adobe.com/mxml/2009"
               xmlns:s="library://ns.adobe.com/flex/spark"
               xmlns:mx="library://ns.adobe.com/flex/mx">

    <fx:Script>
        <![CDATA[
            import mx.core.ClassFactory;
            import spark.skins.spark.DefaultItemRenderer;

            private function list_itemRendererFunc(item:Object):ClassFactory {
                var cla:Class = DefaultItemRenderer;
                switch (item.type) {
                    case "employee":
                    case "manager":
                        cla = EmployeeItemRenderer;
                        break;
                    default:
                        break;
                }
                return new ClassFactory(cla);
            }
        ]]>
    </fx:Script>

    <s:List id="list"
            labelField="name"
            itemRendererFunction="list_itemRendererFunc"
            horizontalCenter="0" verticalCenter="0">
        <s:dataProvider>
            <s:ArrayList>
                <fx:Object name="Employee 1" type="employee" />
                <fx:Object name="Employee 2" type="employee" />
                <fx:Object name="Employee 3" type="employee" />
                <fx:Object name="Employee 4" type="employee" />
                <fx:Object name="Manager 1" type="manager" />
                <fx:Object name="Manager 2" type="manager" />
                <fx:Object name="Employee 5" type="employee" />
                <fx:Object name="Manager 3" type="manager" />
                <fx:Object name="Consultant 1" type="consultant" />
            </s:ArrayList>
        </s:dataProvider>
    </s:List>

</s:Application>

и EmployeeItemRenderer.mxml

<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2009/03/19/using-a-custom-item-renderer-function-with-the-fxlist-control-in-flex-gumbo/ -->
<s:ItemRenderer name="EmployeeItemRenderer"
                xmlns:fx="http://ns.adobe.com/mxml/2009" 
                xmlns:s="library://ns.adobe.com/flex/spark" 
                xmlns:mx="library://ns.adobe.com/flex/mx" 
                autoDrawBackground="true">

    <fx:Script>
        <![CDATA[
            protected function TI_mouseDownHandler(event:MouseEvent):void
            {
                event.stopPropagation();
            }

            protected function TI_mouseUpHandler(event:MouseEvent):void
            {
                event.stopPropagation();
            }

        ]]>
    </fx:Script>


    <s:HGroup>
        <s:Label id="labelDisplay" left="4" right="4" top="4" bottom="4" />
        <s:TextInput id="TI" mouseDown="TI_mouseDownHandler(event)" mouseUp="TI_mouseUpHandler(event)"/>
    </s:HGroup>

</s:ItemRenderer>

Ответы [ 2 ]

0 голосов
/ 29 марта 2011

ОК, похоже, это проблема только Flex 4.01 (спасибо, JAX).В таком случае я получил то, что хотел, остановив распространение на событии mousedown, но не на mouseUp.Это очень специфический случай, который применим к моему коду, поэтому я не уверен, будет ли он действительно полезным для кого-то еще.Я думаю, что интересный урок для меня заключается в том, что mouseUp - это событие, которое связано с управлением курсором / системным курсором.

0 голосов
/ 29 марта 2011

Можете ли вы опубликовать то, что вы пробовали до сих пор?

Я думаю, что все, что вам нужно сделать, - это зарегистрировать слушателей для событий mouseDown, mouseUp и click, а затем использовать http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/events/Event.html#stopPropagation(), чтобы остановить дальнейшее всплытие событий от currentTarget до родителей, stopImmediatePropagation остановит событие от запуска слушателей на текущем объекте.

Shaun

PS Я отредактирую, если вы отправите какой-нибудь код, и я смогу уточнить.

...