监听事件传多个参数

在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,则侦听器只在捕获阶段处理事件,而不在目标或冒泡阶段处理事件。如果 useCapturefalse,则侦听器只在目标或冒泡阶段处理事件。要在所有三个阶段都侦听事件,请调用 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")); 

 

 

 

 

另外,利用匿名函数也可以实现事件的传参。

 监听事件传多个参数