尽管我已经使用 mootools 有一段时间了,但我还没有真正开始和当地人一起玩。目前,我正在尝试通过在原始事件旁边添加自定义 addEvent 方法来扩展事件。我使用以下代码做到了这一点(从 mootools 核心复制)
Native.implement([Element, Window, Document], {
addMyEvent:function(){/* code here */}
}
现在的问题是我似乎无法弄清楚如何正确覆盖现有fireEvent
方法,以便在执行自己的逻辑后仍然可以调用原始方法。
我可能会通过一些丑陋的技巧得到想要的结果,但我更喜欢学习优雅的方式:)
更新:尝试了几个丑陋的黑客。他们都没有工作。要么我不理解闭包,要么我调整了错误的地方。我尝试保存Element.fireEvent
到一个临时变量(使用和不使用闭包),然后我将从覆盖的 fireEvent 函数中调用它(使用覆盖Native.implement
- 与上面相同)。结果是一个无限循环,fireEvent
一遍又一遍地调用自己。
更新 2:我使用 firebug 跟踪执行,它引导我到Native.genericize
,这似乎充当了本机类方法的一种代理。因此,我没有引用实际的 fireEvent 方法,而是引用了代理并导致了无限循环。谷歌没有找到任何有用的文档,当我不完全理解它是如何工作的时候,我对在引擎盖下闲逛有点警惕,所以非常感谢任何帮助。
更新 3 - 解决了原来的问题:当我在下面回复 Dimitar 的评论时,我自己设法解决了原来的问题。我试图制作一种添加事件的方法,这些事件在执行一定数量的执行后会自行销毁。虽然最初的问题解决了,但我关于扩展本地人的问题仍然存在。
这是完成的代码:
Native.implement([Element, Window, Document], {
addVolatileEvent:function(type,fn,counter,internal){
if(!counter)
counter=1;
var volatileFn=function(){
fn.run(arguments);
counter-=1;
if(counter<1)
{
this.removeEvent(type,volatileFn);
}
}
this.addEvent(type,volatileFn,internal);
}
});
名字对吗?这是我能想到的最好的我有限的词汇量。