我的AS3程序有两个功能,一个在宽度和高度改变时触发:
stage.addEventListener(Event.RESIZE, resizeListener);
function resizeListener (e:Event):void {
//some commands
}
第二个是通过一个毫秒传递一个:
var myTimer:Timer = new Timer(clockUpdate, 0);
myTimer.addEventListener(TimerEvent.TIMER, updateData);
myTimer.start();
function updateData(e:TimerEvent):void {
trace("AUTOUPDATE");
trace(e);
}
我需要手动触发这些功能,让我们说用户按下按钮,但我不知道手动调用时我必须发送什么参数。
我尝试了resizeListener()和updateData(),但当然它没有向我询问参数。
答案 0 :(得分:3)
您可以通过提供默认值使函数中的参数成为可选参数。这是一个示例,通过上面的两个函数并使事件参数可选:
function resizeListener(e:Event = null):void {
//some commands
}
和
function updateData(e:TimerEvent = null):void {
trace("AUTOUPDATE");
trace(e);
}
例如,调用resizeListener()
现在将执行该功能,e
的值将默认为null
。
答案 1 :(得分:1)
使事件参数可选,resizeListener(e:Event=null)
,如在walkietokyo的答案中,是一个非常有效且通常很方便的解决方案。另一种方法是将你希望能够做的事情放在一个单独的函数中,而不是在事件处理程序和其他任何地方调用事件。
因此,假设您要调整大小的目的是重新排列布局,并且您还希望在初始化时或单击按钮时执行相同的布局设置,或者在任何时候,您可以执行某些操作像这样:
stage.addEventListener(Event.RESIZE, resizeListener);
function resizeListener(e:Event):void {
rearrangeLayout();
}
function rearrangeLayout():void {
// The actual rearrangement goes here, instead of in resizeListener. This can be called from anywhere.
}
这样做的方法可能是品味问题,也可能因个案而异,真的,两者都很好。
在事件处理程序和另一个函数中分离事物的好处是,不会出现需要检查e:Event参数是否为null的情况。换句话说,您将拥有依赖于事件处理程序中的Event(如果有)的代码,以及在更通用的函数(而不是事件处理程序)中独立于Event的代码。
因此,在更一般和原理图的情况下,结构将是这样的:
addEventListener(Event.SOME_EVENT, eventListener);
function eventListener(e:Event):void {
// Code that needs the Event parameter goes here (if any).
// Call other function(s), for the stuff that needs to be done when the event happens.
otherFunction();
}
function otherFunction():void {
// Stuff that is not dependent on the Event object goes here, an can be called from anywhere.
}