[英]How do I remove YUI delegated events?
我正在尝试为允许用户注入javascript的平台创建脚本。 他们使用的是YUI,特别是Y.one('body).delegate('click',...)
将事件附加到按钮。 我想拦截此按钮,但无法弄清楚如何停止,阻止,删除或以其他方式阻止事件处理程序触发。
注意:我没有直接访问`Y.delegate()返回的处理程序的权限
到目前为止,我已经尝试过
Y.detachAll('click');
Y.unsubscribeAll('click');
Y.one('body').detachAll('click');
Y.one('body').unsubscribeAll('click');
Y.one('.the-delegated-class').detachAll('click');
Y.one('.the-delegated-class').unsubscribeAll('click');
一切都无济于事。 实际上,我唯一的成功就是完全删除并替换了HTML正文,显然它带走了所有事件处理程序,而不仅仅是我想要删除的HTML。
有什么见解吗?
原来我的尝试之一是正确的方法,但是我的用法是错误的。 我(在不知不觉中)试图在首先附加事件之前分离事件。
就是这样: Y.one('body).delegate('click',...)
这有效: Y.one('body').detach('click')
尽管理想情况下,您将直接在委托调用返回的EventHandle上调用detach。
委托Event方法似乎未将句柄存储在任何地方,您可能会为Event.delegate创建补丁替换,以存储代表委托元素的句柄。 修补YUI的基本示例: https : //gist.github.com/tivac/1424351
未经测试的代码:
var config = {
groups : {
patches : {
base : "/js/patches/",
modules : {
"node-event-delegate-patches" : {
path : "node-event-delegate.js",
condition : {
name : "node-event-delegate-patches",
trigger : "node-event-delegate",
test : function() { return true; }
}
}
}
}
}
};
YUI.add("node-event-delegate-patches", function(Y) {
var L = Y.Lang;
Y.Node.prototype.delegate = function(type) {
var args = Y.Array(arguments, 0, true),
handle,
index = (L.isObject(type) && !L.isArray(type)) ? 1 : 2;
args.splice(index, 0, this._node);
if (!L.isArray(this._node._delegate_event_handles)){
this._node._delegate_event_handles = [];
}
handle = Y.delegate.apply(Y, args);
this._node._delegate_event_handles.push( handle );
return handle;
};
Y.Node.prototype.detachDelegates = function(){
Y.Array.each(this._node._delegate_event_handles, function(handle){
handle.detach();
});
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.