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

但它还有一个功能......

4

1 回答 1

3

我做这样的事情:

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

然后我可以将它与事件侦听器一起使用:

onStageResize();

例如在触发事件之前强制执行,

如果您希望事件侦听器调用相同的方法并手动使用不同的参数而不是确保参数是一个事件,您可以使用自定义事件来包装自定义参数,那么您可以测试:

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

但是第二种方法方法没有错:)

此致

于 2012-11-06T07:25:37.280 回答