Flex如何在Flex中运行?
我试图弄清楚焦点机制在Flex中是如何工作的.这是我的意思的例子:
假设我们有一个简单的Web应用程序,它包含扩展Canvas并实现mx.managers.IFocusManagerComponent的自定义组件.此组件会覆盖focusInHandler和focusOutHandler方法,并显示有关如何调用它们的一些反馈(更薄或更粗的边框).此自定义组件还包含一些文本. 该组件的来源是: <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="100" height="100" creationComplete="cc();" implements="mx.managers.IFocusManagerComponent"> <mx:Script> <![CDATA[ import mx.containers.Canvas; import mx.controls.Text; import mx.controls.TextArea; import mx.core.UIComponent; import mx.managers.IFocusManagerComponent; public function cc():void { text = new Text; text.text = "123"; addChild(text); setStyle("backgroundColor","0xddddff"); setStyle("borderColor","0x000000"); setStyle("borderThickness",1); setStyle("borderStyle","solid"); } private var text:Text; override protected function focusInHandler(e:FocusEvent):void { trace("focusInHandler,currFocus: " + focusManager.getFocus()); setStyle("borderThickness",4); } override protected function focusOutHandler(e:FocusEvent):void { trace("focusOutHandler,1); } ]]> </mx:Script> </mx:Canvas> 这是实时版本(带有源视图):http://rafalrybacki.com/lab/focus_question/.在应用程序中,Canvas下方还有一个TextArea – 用于在测试时简化焦点操作. 问题: >如果在紫色画布上单击一次,它会获得焦点(调用focusInHandler),然后如果再次单击,焦点将丢失(调用focusOutHandler) – 为什么? 也许我对整个焦点问题的理解是错误的?谢谢你的任何建议. 尊重地, 拉法尔 解决方法
嘿Rafalrybacki. [我正在参加一个会议,并不能真正花时间在这个问题上,但我想我可以用一两个指针来帮助:]
首先,Canvas的目的是与FocusManager交互,而不是实现IFocusManagerComponent的组件. Canvas实现了IFocusManagerContainer,虽然你可以通过使容器成为IFocusManagerComponent来完成你想要完成的任务,但我会避免它,因为我试图做那些我认为flex sdk团队在使用内部组件时所期望的. 我认为他们打算让你在容器中收听FocusEvent.默认情况下,FocusEvents会出现气泡,因此您可以使用简单的事件侦听器完成所需的大部分操作. 注意:收听focusOut可能会使具有多个uicomponents作为子节点的组件混淆 – 即组合框具有UITextField和Button,因此该组件具有多个FocusOut和FocusIn事件,这些事件发生在同一组件中.你的救星将(我猜)在focusManger.getFocus()项目上做一个container.contains()(投射它等)以准确设置你的风格. 我只是责备,所以如果你需要一些帮助,或者想了解更多关于为什么在调度时派遣focusIn或focusOut evt的话 – 我很乐意为你准备一些代码并解释为什么会发生事件的类型.你最好的选择是(适合flex sdk指南)是使用容器内的事件监听器,而不是与同时是IFocusManagerComponent和IFocusManagerContainer的组件对抗.可能会变得凌乱. 希望有所帮助.祝你好运,杰里米 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |