2012-02-06 13 views
0

goog.eventsでは、unlistenByKeyメソッドを使用して、リスナーの固有のIDによる登録解除を許可します。このキーを取得する唯一の方法は、各イベントタイプを聞いてgoog.events.listenを再度呼び出すか、goog.events.getListenerを呼び出して、各イベントタイプを聴いていることです。Google閉鎖時にunlistenByKeyを使用してイベントを非表示にする

var eventKeys = new Array(2); 
goog.events.listen(document, ['mousedown', 'touchstart'], this.pressStartHandler_, false, this); 
eventKey[0] = goog.events.getListener(document, 'mousedown', this.pressStartHandler_, false, this); 
eventKey[1] = goog.events.getListener(document, 'touchstart', this.pressStartHandler_, false, this);  

EDIT回答から、より良いアドバイスがなければ

、私は、キーを取得するには、次のラッパーを書いている:

/** 
* Wrap goog.events.listen to capture all of the event keys of the requested listeners. 
* 
* @param {(EventTarget | 
*   goog.events.EventTarget | null)} src The node to listen to events on. 
* @param {(Array | 
*   null | string)} type Event type or array of event types. 
* @param {(Object | 
*   null)} listener Callback method, or an object with a handleEvent function. 
* @param {(boolean | 
*   undefined)} opt_capt Whether to fire in capture phase (defaults to false). 
* @param {(Object | 
*   null | undefined)} opt_handler Element in whose scope to call the listener. 
* @returns {Array.<number>} Array of keys for listeners 
*/ 
wias.util.listen = function(src, type, listener, opt_capt, opt_handler) 
{ 
    var i; 
    var keys = new Array(); 
    goog.events.listen(src, type, listener, opt_capt, opt_handler); 
    if (type instanceof Array) 
    { 
    for (i = 0; i < type.length; i++) 
    { 
     keys.push(goog.events.getListener(src, type[i], listener, opt_capt, opt_handler).key); 
    } 
    } 
    else 
    { 
    keys.push(goog.events.getListener(src, type, listener, opt_capt, opt_handler).key); 
    } 
    return keys; 
}; 

答えて

1

あなたはgoog.events.EventHandlerが役立つかもしれません。

// Note that all handler callbacks receive 'this' as the opt_handler, by default. 
var handler = new goog.events.EventHandler(this); 
handler.listen(
    document, ['mousedown', 'touchstart'], this.pressStartHandler_, false); 

// Some time later... 
handler.removeAll(); 

元の質問に答えるために、goog.events.listenは、単一のイベントタイプで使用するとキーを返します。上記の実装では、それぞれのイベントタイプを反復し、それぞれをgoog.events.listenと呼び出し、それぞれのキーを格納することで、少し正確で簡潔になります。

wias.util.listen = function(src, type, listener, opt_capt, opt_handler) { 
    var keys = new Array(); 
    if (type instanceof Array) { 
    for (var i = 0; i < type.length; i++) { 
     keys.push(goog.events.listen(src, type, listener, opt_capt, opt_handler)); 
    } 
    } else { 
    keys.push(goog.events.listen(src, type, listener, opt_capt, opt_handler)); 
    } 
    return keys; 
}; 
関連する問題