如果事件回调传递的是句柄:
[code="javascript"]
function test(){
var obj = getRealObj();//得到一个对象。
bindClickEventByID("id",handleEventFn);
}
function handleEventFn(){
//我这里想用到obj,但是上面传递的是句柄
}
///////////////////////////////////////////////////////////
//我不想这么写
function test(){
var obj = getRealObj();//得到一个对象。
bindClickEventByID("id",function(){
//这样虽然可以使用obj,但是使用匿名句柄,这样我就无法在事件源上移除这个事件了。
});
}
//////////////////////////////////////////
//请问大家有没有什么比较好的解决办法,即可以传递参数,又可以移除事件。
[/code]
再有,顺便问问大家,在动态生成的DOM中绑定事件,并传递参数,有没有什么好的办法,我现在基本是将参数放在DOM结点的属性中,然后使用的时候取,是否可以以对象的形式绑定在DOM文档上?
重写一个bindClickEventByIDwithParam
[code="java"]
bindClickEventByIDwithParam(id,handleEventFn,args){
var el = document.getElementById(id);
[b]el.eventArgs [/b]= args;
……
}
function handleEventFn(){
//获得ID对应的对象,如何获得看你是如何绑定的
var el = ……
var eventArgs = [b]el.eventArgs;[/b]
//调用结束后,把引用去掉,以释放内存
el.eventArgs=null;
}
[/code]
能否这样:
if(!window.obj) {
window.obj = getObject();
}
这样obj是全局的了...
function handleEventFn(){
window.obj.....
}
function test(){
var obj = getRealObj();//得到一个对象。
var functionObj;
functionObj.obj = obj;
functionObj.method=handleEventFn;
bindClickEventByID("id",functionObj);
}
function handleEventFn(){
//我这里想用到obj,但是上面传递的是句柄
}
function bindClickEventByID(srcID, srcFunctionObj){
if(srcFunctionObj.obj){
//使用obj传入参数;
}
}
也可以把var obj = getRealObj();拿到test函数外面,不过好像不太OO,如果你能写一个类就OK了
[code="js"]var Cls = function() {
this.obj = getObject();
};
Cls.prototype = {
obj:{},
test:function() {
var _this = this;
bindClickEventByID("id",function() {
_this.obj....//在这里用obj
});
}
};[/code]
重写一个
bindClickEventByIDwithParam(id,handleEventFn,var obj){}
怎么这么巧,昨天我才放出我的inEdit编辑器,今天你的这个问题正好在inEdit编辑器的制作过程中被inQueue这个对象解决了.
你先看看
http://achun.iteye.com/category/45560
我这个inEdit专题里的文章,到inEdit的主页下载inEdit,看里面inCore.js中inQueue的实现.
先简单说一下inQueue,inQueue有一个功能就是能想触发函数传递附加参数和指定this.
这个应该正好满足你的需求.
等一下,我先写一篇关于inQueue的文章.