监听事件传多个参数
在mxml标签里面添加事件时的传参的例子。
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
public function runMove(dir:String, e:Event):void {
if (dir == "up") {
//moveableButton.y = moveableButton.y - 5; }
} ]]>
</mx:Script>
<mx:VBox horizontalAlign="center">
<mx:Button id="b1" label="Up" click='runMove("up",event);' width="75" />
</mx:VBox>
</mx:Application>
addEventListener是如何定义的
public function addEventListener(type:String,
listener:Function,
useCapture:Boolean = false,
priority:int = 0,
useWeakReference:Boolean = false):void
type:String— 事件的类型。
listener:Function— 处理事件的侦听器函数。此函数必须接受 Event 对象作为其唯一的参数,并且不能返回任何结果,如下面的示例所示:
function(evt:Event):void
函数名可以是任意的。
useCapture:Boolean (default =
false
) — 确定侦听器是运行于捕获阶段、目标阶段还是冒泡阶段。如果将 useCapture
设置为 true
,则侦听器只在捕获阶段处理事件,而不在目标或冒泡阶段处理事件。如果 useCapture
为 false
,则侦听器只在目标或冒泡阶段处理事件。要在所有三个阶段都侦听事件,请调用 addEventListener
两次:一次将 useCapture
设置为 true
,一次将 useCapture
设置为 false
.
priority:int (default = 0
) — 事件侦听器的优先级。优先级由一个带符号的 32 位整数指定。数字越大,优先级越高。优先级为 n 的所有侦听器会在优先级为 n -1 的侦听器之前得到处理。如果两个或更多个侦听器共享相同的优先级,则按照它们的添加顺序进行处理。默认优先级为 0。
useWeakReference:Boolean(default = false
) — 确定对侦听器的引用是强引用,还是弱引用。强引用(默认值)可防止您的侦听器被当作垃圾回收。弱引用则没有此作用。
类级别成员函数不属于垃圾回收的对象,因此可以对类级别成员函数将 useWeakReference
设置为 true
而不会使它们受垃圾回收的影响。如果对作为嵌套内部函数的侦听器将 useWeakReference
设置为 true
,则该函数将作为垃圾回收并且不再是永久函数。如果创建对该内部函数的引用(将该函数保存到另一个变量中),则该函数将不作为垃圾回收并仍将保持永久。
有上面的定义可以看出,listener只能是带有一个event类型的参数,不过下面这个函数可以解决监听器传多个参数的问题。
/** * 监听器添加函数添加参数 */
public static function create(f:Function,... arg):Function {
var F:Boolean=false;
var _f:Function=function(e:*,..._arg):void{
_arg=arg if(!F){
F=true _arg.unshift(e)
}
f.apply(null,_arg)
};
return _f; }
}
使用方法:
btn.addEventListener(BookEvent.ADDBOOK,create("函数名","参数1","参数2"));
另外,利用匿名函数也可以实现事件的传参。