【发布时间】:2011-03-30 01:09:08
【问题描述】:
我在 Spark 项目渲染器中有一个 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>
【问题讨论】:
-
提供一些代码。如果您不向我们展示您想要的东西,我们不能认为它简单或困难。
-
JAX,如下所述,这是难以从项目中提取代码的情况之一。会尝试制造一些东西并发布它 - 我知道拥有代码会让事情变得更简单......
-
好的,已发布代码。感谢您的帮助!
-
对我来说工作正常。在 Windows 7 机器上尝试使用 Flex 4.1 和 4.5。你在 Mac 上?
-
Windows 7,Flex 4.01。就破坏性而言,迁移到 4.1 或 4.5 是否存在重大风险?
标签: apache-flex actionscript-3 flex3 flex4