簡體   English   中英

如何刪除YUI委托事件?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM