2013-02-14 51 views
0
 import flash.events.Event; 

    public class RequestEvent extends Event 
     { 
    public static const REQUEST:String = "request"; 

    private var Results:Boolean; 
    public function get Results():Boolean 
    { 
     return _Results; 
    } 

    public function RequestEvent(Results:Boolean=false) 
    { 
     super(REQUEST); 
     Results = Results; 
    } 

    override public function clone():Event 
    { 
     return new RequestEvent(Results); 
    } 
} 

}如何在Flex中使用事件?

喜可一些身体解释为什么我们在做功能克隆overridding并调用超(请求),在弯曲新........所以不介意。

回答

0

需要实施克隆方法,以便Flex可以在事件处理程序希望再次分派相同事件的情况下重新克隆该事件。 Flex确实提供了一个默认的实现,但是如果需要的话,可以重写克隆该事件的方法。

至于调用超级方法,您必须调用超级扩展Event类的功能。类型(在你的情况下,REQUEST)必须是一个唯一的字符串,它可以唯一标识Flex平台的事件。

希望它有帮助

问候。

+0

感谢好友我m新的flex代码在编码............我是新的编程世界可以指导我如何开始在flex? – ricky 2013-02-14 20:15:49

+0

tv.adobe.com上有很多优秀的视频教程 - 根据我的经验,Flex是最简单,最简单的RIA平台。查看Adobe提供的一些入门指南。他们是那里最好的。问候 – user2073306 2013-02-14 21:58:15

+0

谢谢我已经通过视频,但仍然在努力与一些代码。 – ricky 2013-02-15 05:19:59

0

有关在自定义事件中重写克隆方法的问题非常流行,它似乎是Flex奇怪的事情之一。你可以阅读关于它here

所以你必须重写这个方法,只有在这个方法中你可以定义自定义属性的值。该方法并不常见,所以如果您尝试调试它,您将永远不会在其正文中获得调试器。

如果您尝试在构造函数中定义自定义属性的值,则该值将被忽略。

使用常量字符串作为事件的类型值可能不现实。在这种情况下,您的RequestEvent的所有实例都是相同类型的,并且您不能在不同情况下告诉它们appart。正如你在下面的例子中看到的,这个字符串在动作侦听器中用来映射侦听器函数。

在这个例子中,我有三个不同的事件按钮 - 正常的事件,我的版本的RequestEvent和你的版本。看看它,我希望它可以帮助理解这种情况。

//应用

<fx:Script> 
    <![CDATA[ 
     import fld02.com.customevent.RequestEvent; 
     import fld02.com.customevent.RequestEvent2; 

     import mx.controls.Alert; 

     private function onCustomGroupBtn2Clicked(evt:RequestEvent):void 
     { 
      Alert.show('Btn2Clicked: results = ' + evt.results.toString(), 'This is RequestEvent'); 
     } 

     private function onCustomGroupBtn3Clicked(evt:RequestEvent2):void 
     { 
      Alert.show('Btn3Clicked: Results = ' + evt.Results.toString(), 'This is your RequestEvent'); 
     } 
    ]]> 
</fx:Script> 

<customevent:CustomGroup 
    BUTTON1_CLICKED="{Alert.show('Btn1Clicked', 'This is Event')}" 
    BUTTON2_CLICKED="onCustomGroupBtn2Clicked(event)" 
    request="onCustomGroupBtn3Clicked(event)"/> 
</s:Application> 

// CustomGroup

<?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="346" height="144"> 

<fx:Metadata> 
    [Event(name="BUTTON1_CLICKED", type="flash.events.Event")] 
    [Event(name="BUTTON2_CLICKED", type="fld02.com.customevent.RequestEvent")] 
    [Event(name="request", type="fld02.com.customevent.RequestEvent2")] 
</fx:Metadata> 

<fx:Script> 
    <![CDATA[ 
     private function onBtn1Click():void 
     { 
      this.dispatchEvent(new Event("BUTTON1_CLICKED")); 
     } 

     private function onBtn2Click():void 
     { 
      var requestEvent:RequestEvent = new RequestEvent("BUTTON2_CLICKED"); 
      requestEvent.results = true; 

      this.dispatchEvent(requestEvent); 
     } 

    ]]> 
</fx:Script> 

<s:Button x="43" y="31" width="183" label="Generate Event" click="onBtn1Click()"/> 

<s:Button x="43" y="62" width="183" label="Generate RequestEvent" click="onBtn2Click()"/> 

<s:Button x="43" y="93" width="183" label="Generate Your RequestEvent" click="{this.dispatchEvent(new RequestEvent2(true))}"/> 
</s:Group> 

//我RequestEvent

package fld02.com.customevent 
{ 
import flash.events.Event; 

public class RequestEvent extends Event 
{ 
    private var _results:Boolean; 

    public function RequestEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false) 
    { 
     super(type, bubbles, cancelable); 
    } 

    override public function clone():Event 
    { 
     var requestEvent:RequestEvent = new RequestEvent(this.type); 
     requestEvent.results = this.results; 

     return requestEvent; 
    } 

    public function get results():Boolean 
    { 
     return _results; 
    } 

    public function set results(value:Boolean):void 
    { 
     _results = value; 
    } 
} 
} 

//你的RequestEvent

package fld02.com.customevent 
{ 
import flash.events.Event; 

public class RequestEvent2 extends Event 
{ 
    public static const REQUEST:String = "request"; 

    public function RequestEvent2(Results:Boolean=false) 
    { 
     super(REQUEST); 
     Results = Results; 
    } 

    private var _Results:Boolean; 

    public function get Results():Boolean 
    { 
     return _Results; 
    } 

    override public function clone():Event 
    { 
     return new RequestEvent2(Results); 
    } 
} 
}