加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex如何在Flex中运行?

发布时间:2020-12-15 01:49:20 所属栏目:百科 来源:网络整理
导读:我试图弄清楚焦点机制在Flex中是如何工作的.这是我的意思的例子: 假设我们有一个简单的Web应用程序,它包含扩展Canvas并实现mx.managers.IFocusManagerComponent的自定义组件.此组件会覆盖focusInHandler和focusOutHandler方法,并显示有关如何调用它们的一些
我试图弄清楚焦点机制在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) – 为什么?
>当你点击文本画布获得焦点(focusInHandler被调用)并在区域上被点击时保持它(focusOutHandler nevet叫) – 为什么?

也许我对整个焦点问题的理解是错误的?谢谢你的任何建议.

尊重地,

拉法尔

解决方法

嘿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的组件对抗.可能会变得凌乱.

希望有所帮助.祝你好运,杰里米

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读