繁体   English   中英

YUI 事件似乎不能递归地工作

[英]YUI events don't seem to work recursively

我遇到了一段旧的 YUI3 插件代码,它试图将自己注入到基于事件的流中。 基本上,代码将订阅事件 X,并在处理程序中执行如下操作:

if (!this._hasDoneStuff) {
    doStuff();
    event.preventDefault();
    fire("theEvent", newEvent);
}

preventDefault() 调用似乎不起作用; 活动照常进行。 我设法用一个小例子复制了这一点:

        var eidCounter = 0;
        this.publish("myEvent", {
            defaultFn: function (myEvent) {
                console.log("default function hit by event " + myEvent.eid);
            },
            context: this
        });
        this.on("myEvent", function (myEvent) {
            console.log("saw & prevented " + myEvent.eid);
            myEvent.preventDefault();
            if (myEvent.eid < 3) {
                this.fire("myEvent", { eid: eidCounter++ });
            } else {
                console.log("stopped " + mikeEvent.eid);
            }
        }, this);
        this.fire("myEvent", { eid: eidCounter++ });

我希望这永远不会运行默认函数,因为始终调用preventDefault() 但是,实际输出是:

看到并阻止了 0
看到并阻止了 1
看到并阻止了 2
看到并阻止了 3
停了 3
事件 2 命中的默认函数
事件 1 命中的默认函数
事件 0 命中的默认函数

因此, preventDefault()似乎只对堆栈中的最后一个事件起作用。 这似乎是一个错误,但我实际上是否违反了事件 API 的某些部分? 有解决方法吗?

不幸的是,YUI 一直是这样工作的。 尽管从订阅中触发订阅事件似乎很奇怪,但它确实看起来像是一个错误。 你可以在这里归档: https : //github.com/yui/yui3/issues

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM