Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Events 向mootools addEvent添加自定义代码_Events_Mootools_Native_Extend - Fatal编程技术网

Events 向mootools addEvent添加自定义代码

Events 向mootools addEvent添加自定义代码,events,mootools,native,extend,Events,Mootools,Native,Extend,尽管我已经使用mootools一段时间了,但我还没有真正开始和当地人玩。目前,我正试图通过在原始方法的旁边添加一个自定义addEvent方法来扩展事件。我使用以下代码(复制自mootools core) 现在的问题是,我似乎不知道如何正确地覆盖现有的firevent方法,在执行自己的逻辑后,我仍然可以调用原始方法 我可能会用一些丑陋的技巧得到想要的结果,但我更喜欢用优雅的方式学习:) 更新:尝试了几个丑陋的黑客。他们都没有工作。要么我不理解闭包,要么我调整了错误的位置。我尝试将元素.fireE

尽管我已经使用mootools一段时间了,但我还没有真正开始和当地人玩。目前,我正试图通过在原始方法的旁边添加一个自定义addEvent方法来扩展事件。我使用以下代码(复制自mootools core)

现在的问题是,我似乎不知道如何正确地覆盖现有的
firevent
方法,在执行自己的逻辑后,我仍然可以调用原始方法

我可能会用一些丑陋的技巧得到想要的结果,但我更喜欢用优雅的方式学习:)


更新:尝试了几个丑陋的黑客。他们都没有工作。要么我不理解闭包,要么我调整了错误的位置。我尝试将
元素.fireEvent
保存到一个临时变量中(使用闭包和不使用闭包),然后从覆盖的fireEvent函数调用该变量(使用
本机.implement进行覆盖-同上)。结果是,
firevent
一次又一次地调用自己,形成了一个无休止的循环

更新2: 我使用firebug跟踪执行过程,它引导我找到了
Native.genericze
,它似乎充当了本机类方法的代理。因此,我没有引用实际的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);
}
});
Native.implement([元素、窗口、文档]{
addVolatileEvent:函数(类型、fn、计数器、内部){
如果(!计数器)
计数器=1;
var volatileFn=函数(){
fn.run(参数);
计数器-=1;
if(计数器
添加一个简单的事件处理程序,该处理程序计算它所经历的迭代次数,然后进行自我销毁

将事件视为特定键下的简单回调,其中一些绑定到触发的特定事件

如果可能,使用元素存储总是可取的——它允许您在不同的作用域之间共享同一元素上的数据,而不需要复杂的穿孔或全局变量

当地人不应该这样做,只要做:

Element.implement({
    newMethod: function() {
        // this being the element
        return this;
    }
});

document.id("clicker").newMethod();
当然,除非您需要定义同样适用于窗口或文档的内容

添加一个简单的事件处理程序,该处理程序计算它所经历的迭代次数,然后进行自我销毁

将事件视为特定键下的简单回调,其中一些绑定到触发的特定事件

如果可能,使用元素存储总是可取的——它允许您在不同的作用域之间共享同一元素上的数据,而不需要复杂的穿孔或全局变量

当地人不应该这样做,只要做:

Element.implement({
    newMethod: function() {
        // this being the element
        return this;
    }
});

document.id("clicker").newMethod();

当然,除非您需要定义同样适用于窗口或文档的内容。

如何正确覆盖现有的fireEvent方法,使我在执行自己的逻辑后仍然可以调用原始方法
-将您的逻辑作为第二个调用添加到原始fireEvent回调中是否更有意义相反,ck?aka.
element.addEvent(“单击”,函数(e){someFunction(this,e);…normal code});
或者,在本机事件之外添加一个自定义事件,然后执行
this.firevent(“单击”,e)
原版也会触发。-当您没有共享更多代码来显示问题的上下文时,有点难说。呵呵,我解决了问题。似乎我又一次痴迷于为新的有趣问题找到解决方案,而忘了为原版尝试另一种方法。我正在处理一个方法调用ed
addVolatileEvent
,它的工作原理与
addEvent
类似,但它有一个计数器,在每个
fireEvent
上递减,并且在达到零后,它会破坏事件,使添加一次性事件变得很容易。我提出的方法名称很可能毫无意义,所以请随意推荐一个更好的方法:)
如何正确覆盖现有的fireEvent方法,使我在执行自己的逻辑后仍然可以调用原始方法
-将您的逻辑添加到原始fireEvent回调中作为第二个回调是否更有意义?aka.
element.addEvent(“单击”,函数(e){someFunction(this,e);…normal code});
或者,只需在本机事件之外添加一个自定义事件,然后执行
this.firevent(“单击”,e)
原版也会触发。-当您没有共享更多代码来显示问题的上下文时,有点难说。呵呵,我解决了问题。似乎我又一次痴迷于为新的有趣问题找到解决方案,而忘了为原版尝试另一种方法。我正在处理一个方法调用ed
addVolatileEvent
,它的工作原理与
addEvent
类似,但它有一个计数器,在每个
fireEvent
上递减,并且在达到零后,它会破坏事件,使添加一次性事件变得很容易。我提出的方法名称很可能毫无意义,所以请随意推荐一个更好的方法:)谢谢。您可能想查看我之前添加到问题中的脚本。这里也有:我的方法允许我使用
addVolatileEvent
几乎任何支持常规
addEvent
的地方,并且它不使用元素存储。根据这个定义,许多mootools可以
Element.implement({
    newMethod: function() {
        // this being the element
        return this;
    }
});

document.id("clicker").newMethod();