Apache flex StopEvent超出当前组件的传播

Apache flex StopEvent超出当前组件的传播,apache-flex,actionscript-3,flex3,flex4,Apache Flex,Actionscript 3,Flex3,Flex4,我在spark项目渲染器中有一个TextInput。我需要通过对TextInput停止mouseDown和mouseUp事件来撤销我正在使用的库中的某些行为。但是,我希望TextInput本身能够正常处理此类事件,否则插入符号到光标的转换似乎无法正确处理。我很惭愧地承认,我不知道如何做到这一点-似乎很简单,但我已经坚持了一段时间 谢谢大家! 编辑:好的,这里有一些代码来解释发生了什么(尽管它与我正在做的事情完全无关,所以它不是对我具体情况的精确描述)。正如我前面提到的,我需要能够阻止mouse

我在spark项目渲染器中有一个TextInput。我需要通过对TextInput停止mouseDown和mouseUp事件来撤销我正在使用的库中的某些行为。但是,我希望TextInput本身能够正常处理此类事件,否则插入符号到光标的转换似乎无法正确处理。我很惭愧地承认,我不知道如何做到这一点-似乎很简单,但我已经坚持了一段时间

谢谢大家!


编辑:好的,这里有一些代码来解释发生了什么(尽管它与我正在做的事情完全无关,所以它不是对我具体情况的精确描述)。正如我前面提到的,我需要能够阻止mouseDown和mouseUp从TextInput传播到食物链上的一个组件-event.mouseDown和mouseUp中的StopperPropagation()用于TextInput就可以了。但是,它会弄乱TextInput本身的插入符号/光标处理。无论是否使用event.stopPropagation()尝试下面的代码,您都会明白我的意思

主要


和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>

你能把你到目前为止试过的东西贴出来吗

我认为您需要做的就是注册mouseDown、mouseUp和click events的侦听器,然后使用()阻止事件从currentTarget冒泡到父对象,stopImmediatePropagation将阻止事件触发当前对象上的侦听器

肖恩


PS如果您发布一些代码,我将进行编辑,我可以澄清。

好的,听起来这只是Flex4.01的问题(谢谢JAX)。在这种情况下,我通过停止mousedown事件上的传播而不是mouseUp上的传播,得到了我想要的。这是一个适用于我的代码的非常具体的案例,所以我不确定它是否真的对其他人有用。我想这里给我上的有趣一课是,mouseUp是与插入符号/系统光标管理相关的事件。

提供一些代码。如果您不向我们展示您想要的东西,我们不能认为它简单或困难。JAX,如下所述,这是很难从项目中提取代码的情况之一。我会试着去编造一些东西并发布出来——我知道有了代码会让事情变得更简单……好吧,发布代码。谢谢你的帮助!这对我来说很好。在Windows 7计算机上尝试使用Flex 4.1和4.5。你使用的是mac?Windows 7,Flex 4.01。到了4.1或4.5,是否会有重大的风险?Shaun,谢谢你的回答。我的代码与您提到的完全一样,即,我在此类处理程序中有用于TextInput和event.stopPropagation()的mouseDown和mouseUp处理程序。我原以为这会阻止TextInput处理事件,从而导致奇怪的插入符号行为(基本上,当鼠标悬停在TextInput之外时,插入符号不会变成标准的系统光标),但由于您的澄清,我现在知道TextInput实际上正确地处理了事件。我现在正式不知道为什么这会产生如此有趣的插入符号行为。嘿,弗雷德,再花一点时间讨论一下:事件生命周期。2) 通过mxml在冒泡阶段(post uitextField和post TextInput,以及事件启动时)添加eventListener的一种方法是将鼠标向下的内嵌式侦听器放入HGroup。这不是我喜欢的方式:把它搬到那里应该可以完成你想要的。
<?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>