我在spark Item Renderer中有一个TextInput。我需要通过对TextInput的mouseDown和mouseUp事件的stopPropagation来撤消我正在使用的库中的某些行为。但是,我希望TextInput本身能够正常处理这些事件 - 否则似乎没有正确处理光标转换的插入符号。我很惭愧地承认,我不知道该怎么做 - 看起来很简单,但我已经坚持了一段时间。
谢谢你!编辑:好的,这里有一些代码可以解释发生了什么(尽管它与我正在做的完全无关,所以它并不是我具体情况的准确描述)。正如我上面提到的,我需要能够阻止mouseDown和mouseUp从TextInput传播到食物链中的组件 - mouseDown中的event.stopPropagation()和TextInput中的mouseUp。但是,它会弄乱TextInput本身的插入符/游标处理。无论有没有event.stopPropagation(),请尝试以下代码,你应该明白我的意思。
主要
<?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>
答案 0 :(得分:0)
你能发布到目前为止你尝试过的内容吗?
我认为您需要做的就是为mouseDown,mouseUp和click事件注册监听器,然后使用http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/events/Event.html#stopPropagation()来阻止事件从currentTarget向父母进一步冒泡,stopImmediatePropagation将停止事件触发当前对象的侦听器。
肖恩
PS我会编辑,如果你发布一些代码,我可以澄清。
答案 1 :(得分:0)
好的,听起来这只是Flex 4.01的一个问题(谢谢JAX)。在这种情况下,我通过在mousedown事件上停止传播而不是在mouseUp上获得我想要的东西。这是一个非常具体的情况适用于我的代码,所以我不确定它是否对其他人真的有用。我想这里有趣的教训是,mouseUp是与插入符/系统游标管理相关的事件。