通过addEventListener函数给控件动态加载click事件侦听函数时,传递更多的参数

今天遇到一个问题,问题是给多个按钮绑定侦听事件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 curr:Object = subMenu[i].getChildAt(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,所以只好选取了第一种。虽然有效,但对我无有。

“通过addEventListener函数给控件动态加载click事件侦听函数时,传递更多的参数”的3个回复

发表评论