今天遇到一个问题,问题是给多个按钮绑定侦听事件addEventListener时,绑定的事件函数是同一个函数:
[codes=java]
public function gotoUrl(evt:MouseEvent):void{
navigateToURL( new URLRequest(不同的按钮,转向不同的URL) );
}
在网上搜索了一下,找到了2种方法:
第一种是对Actionscript的扩展:
[codes=java]
package
{
public class EventArgExtend
{
public function EventArgExtend()
{
}
public static function create(f:Function,… arg):Function
{
var F:Boolean=false;
var _f:Function=function(e:*,…_arg){
_arg=arg
if(!F){
F=true
_arg.unshift(e)
}
f.apply(null,_arg)
};
return _f;
}
public static function toString():String
{
return “Class JEventDelegate”;
}
}
}
在使用时也很方便:
[codes=java]
for(var j:int=0; j
var url:String = menus.items[i].item[j].@url;
curr.addEventListener(MouseEvent.CLICK, EventArgExtend.create(gotoUrl,url));
}
public function gotoUrl(evt:MouseEvent, …arg):void{
navigateToURL( new URLRequest(arg[0].toString()) );
}
这种方法用的不错,我最终就是选择的这个方法。
另外一种则是通过 function(){ 在这里套函数在传参数 },比如:
[codes=java]
curr.addEventListener(MouseEvent.CLICK, function (e:MouseEvent){gotoUrl(e,url)});
function gotoUrl(evt:MouseEvent, url:String):void{
trace(url);
//navigateToURL(new URLRequest(“content/002001.html”));
}
经测试,传递的参数总是最后一次传递的URl,所以只好选取了第一种。虽然有效,但对我无有。
第三个无效应该是因为闭包
支持楼主再发些精品的贴子!www.wlyxwb.com
很开心来到博主的博客,支持你哦