Ext为处理函数自定义输入参数的四种方法(转载)

1: 简单返回Function

原理说明:相对于EventHandler加了一层shell,原理是把参数转化为闭包的成员,然后随机返回函数,符合处理函数必定为Function类型即可。

演于代码片段

e1.on('click',function shell(arg1,arg2,.....));

function shell(arg1,arg2,.....)

{

//返回的是真正的Event Handler

  return function()

  {

    //这里arg1,arg2仍然可使用,在同一闭包内的缘故

   }

}

 

2:函数委托Function.prototype.createDelegate

原理说明:createDelegate允许设置你将对象绑定一个在其作用域下的函数,亦可将特定的多个参数写成数组传入到那个函数中。可选地,这需要一个参数来指定是否将参数列表传到参数数组arguments中去。如果这个第三参数没有传入,数组将是整个的参数列表。

特点:createDelegate方法需要将绑定一个作用域的对象(this), 若scope参数已指定了作用域的对象,显得多此一举。

演于代码片段:

//只要是Function类型的对象都可以使用createDelegate方法,其作用如下:

var fn=func1.createDelegate(scope,[arg1,arg2],true);

fn(a,b,c)===scope.func1(a,b,c,arg1,arg2);

var fn=func1.createDelegate(scope,[arg1,arg2]);

fn(a,b,c)===scope.func1(arg1,arg2);

var fn=func1.createDelegate(scope,[arg1,arg2],1);

fn(a,b,c)===scope.func1(a,arg1,arg2,b,c);

 

3:在scope参数中指定

原理说明:每一个处理函数都可以分配一个作用域的对象。即处理函数执行时,this指向的对象就靠紧贴着处理函数的参数后面的第三个参数来指定。

特点:只能传入一个“参数”。通常指定了处理函数的作用域就无须再引入“参数”的概念。

演于代码片段:

 var onClick=function(){
          alert(this.someProperty);
       };
       var scope = {
          someProperty : 'shit'
       }
       Ext.get('somelink').on('click',onClick,scope);

 

4:在options参数中指定(推荐方式)

原理说明:你也可以传递自定义的参数到事件处理器。当你想在事件处理代码内部使用一个变量,而不想改变作用域时,这个功能就很有用了。要这样做基本上你只要将自定义参数添加到options对像,函数内容就可以变相到得到“参数”。

特点:“心血来潮”时加入“参数”方法,副作用少,也是最推存的方法。

演于代码:

function onClick(ev,target,options)

{

   alert(options.somePropety);  //alert 'somue'

}

var el=Ext.get('somelink');

el.on('click',onClick,null,{someProperty : 'somue'});

posted @ 2011-09-16 14:47  jadebug  阅读(1075)  评论(0编辑  收藏  举报