Flex使用没有参数的回调函数添加事件侦听器

时间:2009-06-10 08:30:41

标签: flex actionscript-3 event-handling

fileReference.addEventListener(Event.COMPLETE, uploadCompleteHandler);

  private function uploadCompleteHandler(event:Event):void {}

上面是在Actionscript中添加事件监听器的一种方法。 默认情况下,回调函数需要有一个参数 名称事件和类型事件。 有没有办法声明这个函数没有任何参数:

  private function uploadCompleteHandler():void {}

编辑:可以在mxml中添加没有任何参数的事件处理程序。所以一个学生想知道,为什么不能在动作中做同样的事情呢?

2 个答案:

答案 0 :(得分:8)

原因是在mxml中你写的实际上不是处理程序,是在处理程序中执行的。如果使用-keep-generated-actionscript标志进行编译(要在Flex Builder中右键单击以打开项目属性,选择Flex Compiler,并将-keep-generated-actionscript添加到Additional编译参数),您可以在生成的组件源,编译器为该事件创建了一个处理程序,而body由您在mxml中编写的组成。

所以如果你有类似的东西:

click="doSomething();"

您已经注意到您实际上在那里发出了一条指令,这不是您使用addEventHandler时传递的方法参考。

然后你将在生成的文件中有:

private function myComponent_Click(evt : MouseEvent) : void
{
    doSomething();
}

在同一文件的其他地方添加事件监听器:

this.addEventListener(MouseEvent.CLICK, myComponent_Click);

注意第二个参数不是函数结果,它是函数引用,因为缺少表示函数调用的括号,而且我们的特定函数也不是getter。

您还可以在mxml中指定更多调用,例如:

click="doSomething(); doSomethingElse();"

您甚至可以将event参数传递给您的方法:

click="doSomething(event);"

无论你在mxml事件的值中写什么(不确定它是否正确使用)都将成为actionscript事件生成的处理程序的主体。

答案 1 :(得分:3)

不,如果您尝试将其注册为事件侦听器,则会在事件触发时获得运行时异常。

您可以使用以下语法直接在没有事件对象的情况下调用处理程序:

private function uploadCompleteHandler(event:Event = null):void {}