Ext为处理函数自定义输入参数的四种方法(转载)
1: 简单返回Function
原理说明:相对于EventHandler加了一层shell,原理是把参数转化为闭包的成员,然后随机返回函数,符合处理函数必定为Function类型即可。
演于代码片段
e1.on('click',function shell(arg1,arg2,.....));
function shell(arg1,arg2,.....)
{
//返回的是真正的Event Handler
}
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指向的对象就靠紧贴着处理函数的参数后面的第三个参数来指定。
特点:只能传入一个“参数”。通常指定了处理函数的作用域就无须再引入“参数”的概念。
演于代码片段:
4:在options参数中指定(推荐方式)
原理说明:你也可以传递自定义的参数到事件处理器。当你想在事件处理代码内部使用一个变量,而不想改变作用域时,这个功能就很有用了。要这样做基本上你只要将自定义参数添加到options对像,函数内容就可以变相到得到“参数”。
特点:“心血来潮”时加入“参数”方法,副作用少,也是最推存的方法。
演于代码:
function onClick(ev,target,options)
{
}
var el=Ext.get('somelink');
el.on('click',onClick,null,{someProperty : 'somue'});