Flex中自定义事件

来源:互联网 发布:淘宝怎么做虚拟网店 编辑:程序博客网 时间:2024/06/06 08:52

<?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"
      creationComplete="creationCompleteHandler(event)">
 
<fx:Metadata>
  [Event("showYaner")]
 </fx:Metadata>

 <fx:Script>
  <![CDATA[
   import mx.controls.Alert;
   import mx.events.FlexEvent;

   //应用程序启动时注册监听
   protected function creationCompleteHandler(event:FlexEvent):void
   {
    this.addEventListener("showYaner", showHandler);
   }
   
   //监听响应函数
   private function showHandler(e:Event):void
   {
    Alert.show("我的老婆,想你");
   }

  ]]>
 </fx:Script>
 <!-- 当点击Button按钮的时候,派发事件-->
 <s:Button id="eventTest" label="wife" width="20" height="20" click="{dispatchEvent(new Event('showYaner'))}"/>
</s:Application>

 

 

 

另一种事件响应方式(即从一个组件中监听另一个组件的方法)

<?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" xmlns:local="*">
 <s:layout>
  <s:BasicLayout/>
 </s:layout>
 <fx:Declarations>
  <!-- 将非可视元素(例如服务、值对象)放在此处 -->
 </fx:Declarations>
 <fx:Script>
  <![CDATA[
   import mx.controls.Alert;
   private function mytestHander():void
   {
    Alert.show("===我的小艳儿===");
   }
  ]]>
 </fx:Script>
 <local:Mycanvas myyaner="mytestHander()"/>
</s:Application>

---Mycanvas 组件

 

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:fx="http://ns.adobe.com/mxml/2009"
     xmlns:s="library://ns.adobe.com/flex/spark"
     xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300">
 <fx:Declarations>
  <!-- 将非可视元素(例如服务、值对象)放在此处 -->
 </fx:Declarations>
 <fx:Metadata>
  [Event(name='myyaner', type='flash.events.Event')]
 </fx:Metadata>
 <s:Button id="yanerbtn" label="事件测试" click="{dispatchEvent(new Event('myyaner'))}"/>
</mx:Canvas>

 

 

还有一点需要注意,也是自己在平时中总结出来的,就是,事件只能在父类中添加监听,在当前类或是子类中触发。不能与不相关(平级的组件)之间调用:如:

 

    

<?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"

              xmlns:local="*" creationComplete="application1_creationCompleteHandler(event)">

    <fx:Metadata>

       [Event(name="bookSelected", type="events.Event")]

    </fx:Metadata>

   

    <fx:Script>

       <![CDATA[

           import events.BookEntryEvent;

          

           import mx.controls.Alert;

           import mx.events.FlexEvent;

 

           protected function button1_clickHandler(event:MouseEvent):void

           {

              this.dispatchEvent(new Event("bookSelected"));

           }

 

           protected function application1_creationCompleteHandler(event:FlexEvent):void

           {

              this.addEventListener("bookSelected", onBookSelectEventHandler);

           }

          

           private function onBookSelectEventHandler(e:Event):void

           {

              Alert.show("自定义监听的事件");

           }

 

       ]]>

    </fx:Script>

    <s:Button x="127" y="134" label="触发事件" width="202" height="38" click="button1_clickHandler(event)"/>

    <local:listenerTest/>

</s:Application>

 

 

 

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

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

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

        xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300"

        creationComplete="group1_creationCompleteHandler(event)">

    <s:layout>

       <s:BasicLayout/>

    </s:layout>

    <fx:Script>

       <![CDATA[

           import events.BookEntryEvent;

          

           import mx.controls.Alert;

           import mx.events.FlexEvent;

 

           protected function group1_creationCompleteHandler(event:FlexEvent):void

           {

              mybtn.addEventListener("bookSelected", onBookSelectEventHandler);

           }

          

           private function onBookSelectEventHandler():void

           {

              Alert.show("自定义监听的事件");

           }

 

       ]]>

    </fx:Script>

    <fx:Declarations>

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

    </fx:Declarations>

    <s:Button label="45234drfsdfsdf" x="100" id="mybtn"/>

</s:Group>

 

上面举得这个示例,就不能派发Group中的事件。    如果是使用父类与子类关系的事件监听的话,一定要把new Event()中的bubbles属性设置为true,表示该事件为冒泡事件。否则,事件不会派发。

 

 

 

 

原创粉丝点击