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);
    }
}

}

こんにちは、関数クローンを実行して super(request) を呼び出す理由を誰かが説明できますか? overriddingflex の新機能 ..........気にしないでください。

4

2 に答える 2

0

イベントハンドラーが同じイベントを再度ディスパッチしたい場合に、Flex がイベントを再複製できるように、clone メソッドを実装する必要があります。Flex はデフォルトの実装を提供しますが、必要に応じてメソッドをオーバーライドしてイベントを別の方法で複製できます。

スーパー メソッドの呼び出しに関しては、Event クラスを拡張しているため、スーパーを呼び出す必要があります。タイプ (この場合は REQUEST) は、イベントを Flex プラットフォームに対して一意に識別する一意の文字列である必要があります。

それが役に立てば幸い

よろしく。

于 2013-02-14T19:28:16.460 に答える
0

カスタム イベントでの clone メソッドのオーバーライドに関する質問は非常によく寄せられており、Flex の奇妙な点の 1 つと思われます。ここでそれについて読むことができます。

したがって、このメソッドをオーバーライドする必要があり、このメソッドでのみカスタム プロパティの値を定義できます。メソッドは通常のものではないため、デバッグしようとすると、デバッガーが本体に含まれることはありません。

コンストラクターでカスタム プロパティの値を定義しようとすると、値は無視されます。

イベントのタイプ値として定数文字列を使用するのは実用的ではない場合があります。この場合、 RequestEvent のすべてのインスタンスは同じタイプであり、さまざまな状況で使用されているとは言えません。以下の例でわかるように、この文字列はアクション リスナーで使用され、リスナー関数をマップします。

この例では、異なるイベントを持つ 3 つのボタンがあります。通常のイベント、私のバージョンの 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);
    }
}
}
于 2013-02-14T19:29:34.643 に答える