Flex 事件机制

使用ActionScript的单击事件示例

<?xml version="1.0" encoding="utf-8"?>

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 

               xmlns:s="library://ns.adobe.com/flex/spark" 

               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" applicationComplete="init()">

    <fx:Script>

        <![CDATA[          

            import mx.controls.Alert;

            protected function init():void

            {

                test3.addEventListener(MouseEvent.CLICK,onClick)

            }

            protected function onClick(event:Event):void

            {

                Alert.show(event.target.label+"clicked","时间测试");

            }

        ]]>

    </fx:Script>

    <fx:Declarations>

        <!-- 将非可视元素(例如服务、值对象)放在此处 -->

    </fx:Declarations>

    <s:Button     id="test3" x="493" y="62" width="112" height="44" label="按钮"/>

</s:Application>

绑定事件

无论何时创建对某个变量的绑定,都会注册一个事件监听器,监听器会在变量被修改时做出响应。

ActionScript依赖ChangeWatcher类实现数据绑定

<?xml version="1.0" encoding="utf-8"?>

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 

               xmlns:s="library://ns.adobe.com/flex/spark" 

               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"

               applicationComplete="init()">

    <fx:Script>

        <![CDATA[

            import mx.binding.utils.ChangeWatcher;

            import mx.events.FlexEvent;

            import mx.events.PropertyChangeEvent;

            

            protected var _watcher:ChangeWatcher;

            

            protected function init():void

            {

                toggleWatch();

            }

            protected function toggleWatch():void

            {

                if(_watcher&&_watcher.isWatching())//确定监视器活跃

                {

                    _watcher.unwatch();//移除监视器的变量

                    test3.label="Watch";

                }

                else

                {

                _watcher=ChangeWatcher.watch(input,"text",onChange);

                test3.label="Stop Watching!";

                }

            }

            protected function onChange(event:Event):void

            {

                label1.text=input.text;

            }

            

        ]]>

    </fx:Script>

    <s:Button     id="test3" x="338" y="176" width="112"

                  height="44" label="Watch Text" click="toggleWatch()"/>

    <s:Label id="label1" x="510" y="176" width="176" height="53" />    

    <s:TextInput id="input" x="510" y="239" width="176" height="53" text="start text"/>

</s:Application>

 

我们刚刚看到的是unwatch()方法的用法,该方法可以取消监视变量的行为。在使用事件监听器的情况下,同样可以做到这一点。如果事件监听器是在运行时通过ActionScript添加的,就可以使用removeEventListener()方法移除。Unwatch()方法只是使用removeEventListener停止事件的分派。

看如何移除事件监听器:

<?xml version="1.0" encoding="utf-8"?>

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 

               xmlns:s="library://ns.adobe.com/flex/spark" 

               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">

    <s:layout>

        <s:VerticalLayout/>

    </s:layout>

    <fx:Script>

        <![CDATA[

            import mx.events.DragEvent;

            protected function toggleListener():void

            {

               if(box.hasEventListener(MouseEvent.CLICK))

               {

                 log("Listeners removeed");

                 //移除事件侦听器

                 box.removeEventListener(MouseEvent.MOUSE_OVER,onEvent);

                 box.removeEventListener(MouseEvent.MOUSE_OUT,onEvent);

                 box.removeEventListener(MouseEvent.MOUSE_MOVE,onEvent);

                 box.removeEventListener(MouseEvent.CLICK,onEvent);      

               }

              else

              {

                log("Listeners added")

                //添加事件侦听器

                box.addEventListener(MouseEvent.CLICK,onEvent);

                box.addEventListener(MouseEvent.MOUSE_MOVE,onEvent);

                box.addEventListener(MouseEvent.MOUSE_OUT,onEvent);

                box.addEventListener(MouseEvent.MOUSE_OVER,onEvent);

              }

           }

          protected function log(text:String):void//添加新的String用于显示

          {

              logField.text=text+"\n"+logField.text;  

          }

         protected function onEvent(event:Event):void

          {

              log("Event triggered:"+event.type);

          }

            

        ]]>

    </fx:Script>

    <s:Button label="Toggle Listener" click=" toggleListener()"/>

    <s:Group id="box">

        <s:Rect width="200" height="50">

            <s:fill>

                <s:SolidColor color="0x979797"/>

            </s:fill>

        </s:Rect>

    </s:Group>

    <s:TextArea id="logField" width="400" height="400"/>

</s:Application>

 

 

 

 

你可能感兴趣的:(Flex)