0

私はaddEventListener方法が少し限られていると思います。私が作成した別のバージョンを使用したいと思います。ディスパッチされたイベントを自動削除できるかどうかを示すパラメーターを挿入したいので、これをどこにでも書き込む必要がなくなります。

obj.addEventListener(Click, function onClick(e:Event):void {
    obj.removeEventListener(Click, onClick); // <--- I want to avoid this
});

それで:

obj.addEventListener(Click, function onClick(e:Event):void {
    // no need anymore.
}, true); // <--- see

そこに到達するためには、どのようなアプローチをとればよいでしょうか。

4

2 に答える 2

1

クロージャーでオーバーライドを使用して、いつでもメソッド呼び出しをインターセプトできます。addEventListener

    override public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void 
    {
        var self = this;
        var weakListener:Function = function(e) {
            self.removeEventListener(type, weakListener);
            listener(e);
        }
        super.addEventListener(type, weakListener, useCapture, priority, useWeakReference);
    }
于 2013-07-15T12:57:11.367 に答える
0

匿名関数を許可するための迅速でかなり単純なソリューションは、arguments.callee プロパティです。

obj.addEventListener(Event.WHATEVER, function(e:Event)
{
    e.currentTarget.removeEventListener(Event.WHATEVER, arguments.callee);
    //Do your stuff
}

これにより、イベントリスナーとリッスン関数が同時に作成されます。削除リスナーでは、arguments.callee が呼び出された関数を参照し、それ自体を削除できるようにします。

于 2013-07-16T08:03:59.070 に答える