0

イベントによって、または手動で呼び出すことができるイベントリスナーを作成しようとしています。イベントによって呼び出された場合は、イベントリスナーを削除する必要があります。その他の場合-何かをするだけです。パラメータの数を決定するために(... args)構造を使用しています。しかし、Eventによって関数が呼び出されたとき、argsのタイプがObjectに変更されたように見えるため、args.targetフィールドとargs.typeフィールドを取得できませんでした。しかし、(args:Event)を使用すると、すべて問題なく動作します。

private function smartErrListener(... args) {
    // when function called by event
    // args.length == 1 
    // args instanceof Event == false
    // args is Event == false
    // typeof(args) == 'object'

    if (args.length == 1 && args instanceof Event) {
        args.target.removeEventListener(Event.COMPLETE, OkListener);
        args.target.removeEventListener(IOErrorEvent.IO_ERROR, smartErrListener);
    }

    trace("We've got an errors!");
}

何か案は?

ps:もちろん、次のようなことを行うことは可能です

private function smartErrListener(e:Event) {
    e.target.removeEventListener(Event.COMPLETE, OkListener);
    e.target.removeEventListener(IOErrorEvent.IO_ERROR, smartErrListener);

    this.errCallback();
}

private function errCallback() {
    trace("We've got an errors!");
}

しかし、それはもう1つの機能です...

4

1 に答える 1

3

私はこのようなことをします:

protected functiom onStageResize(e:Event = null):void
{}

次に、イベントリスナーと単独で使用できます。

onStageResize();

たとえば、イベントがトリガーされる前に実行を強制するには、

イベントリスナーによって呼び出され、引数がイベントであることを確認するよりも手動で異なる引数を使用して同じメソッドを呼び出したい場合は、カスタム引数をラップするカスタムイベントを作成できます。次にテストできます。

if( e is MyCustomEvent )
{
    //called manually
}

しかし、2番目の方法のアプローチには何の問題もありません:)

よろしくお願いします

于 2012-11-06T07:25:37.280 に答える