2013-02-14 33 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); 
    } 
} 
}