[英]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.