2

私はアクションスクリプトが初めてで、既存のコードを理解しようとしています。ここに MyRestServiceEvent と MyRestService があります。多くのイベントをディスパッチする MyRestService クラスで定義された多くのメソッドがありますが、いくつかの実装dispatchEvent(evt.clone());は理解できません。MyRestServiceEvent が既に clone() を実装していることは知っていますが、これは何をするのdispatchEvent(evt.clone());でしょうか? 誰かが私にプロセスを説明してくれたら本当に感謝しています.

以下は、これら 2 つのクラスのスナップショットです。

イベントクラス

        public function MyRestServiceEvent(type:String, request:MyRestRequest, result:* = null, bubbles:Boolean=false, cancelable:Boolean=false)
        {
            super(type, bubbles, cancelable);

            this.result = result;
            this.request = request;
        }

        /**
         * Override clone to support re-dispatching
         */
        override public function clone():Event
        {
            return new MyRestServiceEvent(type, this.request, this.result, bubbles, cancelable);
        }
    }
}

イベントディスパッチャークラス

public class MyRestService extends EventDispatcher
    {

        // ton of methods here but below is an example of one of the functions 

        private function checkAdminErrorHandler(evt:MyRestServiceEvent):void
        {
            dispatchEvent(evt.clone());
        }
}
4

2 に答える 2

3

このclone()メソッドは、Event オブジェクトの複製インスタンスを作成します。これは、クラスの新しいインスタンスを作成し、そのプロパティを元のインスタンスと同じ値に設定することによって行われます。カスタム イベントは、参照型のレプリケーションを正しく処理するために、このメソッドをオーバーライドする場合があります。

イベントを再ディスパッチする場合は、その読み取り専用プロパティ (bubbles、cancelable、currentTarget、target) を新しい値に再度設定できるように、複製が必要です。

于 2013-08-01T07:53:20.623 に答える
2

コード例のクローンは完全に冗長です-dispatchEventは実際にクローンをディスパッチします(したがって、カスタムイベントでクローンメソッドを[オーバーライド]する必要があります)ので、クローンに渡す必要はありません。このコードはまったく同じように機能します。

dispatchEvent(evt);

イベントが再送信される理由については、イベント バブリングが false に設定されているためだと思います。そのため、イベントを効果的に再ディスパッチすると、アプリケーション内の別のレイヤーに効果的に「バブル」され、より多くの「もの」がそれをリッスンできるようになります。

于 2013-08-04T17:29:21.377 に答える