goog.events предоставляет метод unlistenByKey, позволяющий осуществлять конкретную дерегистрацию слушателя по его уникальному идентификатору. Правильно ли, что единственный способ получить этот ключ - вызывать либо goog.events.listen
с каждым типом событий, прослушиваемым или вызывающим goog.events.getListener
с каждым прослушиваемым типом события?Упорядочение событий с помощью unlistenByKey в google-закрытии
например.
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;
};