Pergunta

Eu estou procurando uma resposta actualizada para esta pergunta .

Parece que Event.observers não é mais utilizado (talvez para evitar vazamentos de memória) em Prototype 1.6+, assim como faço para rastrear agora o que os ouvintes de eventos estão ligados a um elemento?

Eu sei Firebug tem uma "pausa na próxima" botão, mas existem vários ouvintes do mouse sobre o elemento de corpo que execute antes que eu possa chegar ao comportamento que eu quero em um outro elemento em particular, então há alguma outra maneira?

Foi útil?

Solução

Eu tenho atualizar a resposta ligado a você com cobertura Prototype mais abrangente contabilização de alterações nas versões 1.6.0 para 1.6.1.

Ele ficou muito confuso entre lá, mas 1.6.1 é um pouco limpo:

var handler = function() { alert('clicked!') };
$(element).observe('click', handler);

// inspect
var clickEvents = element.getStorage().get('prototype_event_registry').get('click');
clickEvents.each(function(wrapper){
    alert(wrapper.handler) // alerts "function() { alert('clicked!') }"
})

Outras dicas

As coisas estão agora encaminhado através de armazenamento Elemento:)

Element.getStorage(yourElement).get('prototype_event_registry') lhe dará uma instância de Hash de Prototype, para que você possa fazer qualquer coisa que você faria com hash.

// to see which event types are being observed
Element.getStorage(yourElement).get('prototype_event_registry').keys();

// to get array of handlers for particular event type
Element.getStorage(yourElement).get('prototype_event_registry').get('click');

// to get array of all handlers
Element.getStorage(yourElement).get('prototype_event_registry').values();

// etc.

Note que estes são detalhes sem documentos internos , que pode ser alterado no futuro, então eu não iria contar com eles, exceto para, talvez, fins de depuração.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top