fileReference.addEventListener(Event.COMPLETE, uploadCompleteHandler);
private function uploadCompleteHandler(event:Event):void {}
上面是在Actionscript中添加事件监听器的一种方法。 默认情况下,回调函数需要有一个参数 名称事件和类型事件。 有没有办法声明这个函数没有任何参数:
private function uploadCompleteHandler():void {}
编辑:可以在mxml中添加没有任何参数的事件处理程序。所以一个学生想知道,为什么不能在动作中做同样的事情呢?
答案 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 {}