¿Hay alguna forma de determinar qué detectores de eventos están registrados con un objeto de visualización? Quiero eliminar todos los detectores de eventos de un objeto de visualización para poder asignar nuevos en función de los cambios de contexto en la aplicación.¿Cómo eliminar todos los detectores de eventos de un objeto de visualización?
Respuesta
jeceuyper es correcto ...
un lado, no sin embargo: DisplayObject
extiende EventDispatcher
, que ya no implementar IEventDispatcher
... así que para ser más precisos: se debe redefinir addEventListener
y removeEventListener
para realizar un seguimiento de los oyentes ...
algunos detalles técnicos: sugiero que use Dictionary
para almacenar las funciones del controlador ... un poco más lento para la inserción, pero mucho más rápido para la eliminación ... también, Dictionary
admite referencias débiles, que es bastante importante en el caso del manejo de eventos ... también tenga en cuenta que useCapture
permite agregar el mismo controlador de doble ...
buena suerte entonces ...;)
¡Gracias por señalar eso en back2dos! – jdecuyper
Glenn tiene razón, no existe tal método como removeAllListener o listAllListener. Sin embargo, podría hacer que su cpusum diplayObject implemente la interfaz IEventDispatcher y realice un seguimiento de todos los oyentes agregados o eliminados de su objeto.
back2dos ha mencionado el enfoque que debe utilizar, lo que hice fue extender la clase movieclip e implementado todo tipo de funciones que uso a diario, pero que no forman parte de la clase Movieclip. incluyendo la anulación de la clase addEventListener
protected var listeners : Dictionary = new Dictionary();
override public function addEventListener(type : String, listener : Function, useCapture : Boolean = false, priority : int = 0, useWeakReference : Boolean = true) : void
{
var key : Object = {type:type,useCapture:useCapture};
if(listeners[ key ]) {
removeEventListener(type, listeners[ key ], useCapture);
listeners[ key ] = null;
}
listeners[ key ] = listener;
super.addEventListener(type, listener, useCapture, priority, useWeakReference);
}
protected function removeListeners() : void
{
try
{
for (var key:Object in listeners) {
removeEventListener(key.type, listeners[ key ], key.useCapture);
listeners[ key ] = null;
}
}catch(e:Error){}
}
... excepto que incorporar el tipo en la clave sin incorporar el puntero a la función significa que solo puede tener un oyente de un tipo determinado en el objeto. Para permitir múltiples oyentes, agregue el puntero de la función del oyente al objeto clave y simplemente establezca esa clave en algún valor ficticio (por ejemplo, 1). –
Esta es una especie de truco, pero en algunos (tal vez la mayoría de los casos), se puede ajustar fácilmente el objeto de visualización para anular y volver a iniciarlo y luego volver a configurarlo con cero interrupción visual.
Esto tiene la ventaja añadida de eliminar todos los oyentes del evento.
A menos que esté haciendo esto en una aplicación que ya tiene cientos de oyentes y objetos, entonces debería funcionar perfectamente bien siempre que pueda tolerar la reconfiguración de su objeto de visualización.
Obviamente, no debe hacer esto en cualquier cosa que esté haciendo algo loco en el constructor como cargar datos.
function a(){
mc.addEventListener(Event.ENTER_FRAME,function(){
...
}
}
function b(){
mc.removeEventListener(Event.ENTER_FRAME,function(){});
}
obras ...
Lea la pregunta con más cuidado. Pregunté cómo eliminar TODOS los oyentes de eventos de un objeto. – Soviut
En realidad, solo estaba viendo esta pregunta para resolver este problema. – andychase
Esto no funcionará: la función del controlador de eventos anónimos creado dentro de 'la función b' es un objeto diferente de la función del controlador de eventos anónimos creado dentro de' la función a'. Por lo tanto, la llamada 'removeEventListener' fallará silenciosamente. – ericsoco
- 1. Cómo eliminar todos los detectores de eventos a la vez en AS3
- 2. ¿Debo eliminar los detectores de eventos antes de eliminar los elementos?
- 3. ¿Quitar todos los detectores de eventos JavaScript de un elemento y sus elementos secundarios?
- 4. Secuencia de comandos de acción: ¿Establecer un objeto como nulo elimina automáticamente todos los detectores de eventos adjuntos?
- 5. Cómo deshabilitar temporalmente los detectores de eventos en Swing?
- 6. ¿Hay alguna manera de eliminar los detectores de eventos desconocidos de los objetos?
- 7. Cómo eliminar todos los controladores de eventos Click en Jquery
- 8. ¿Cómo eliminar todos los controladores de eventos Click?
- 9. ¿Es necesario eliminar los detectores de eventos de JavaScript antes de eliminar el elemento al que están conectados?
- 10. Jquery detectores de eventos añadiendo a los elementos
- 11. detectores de eventos - Equivalente para Firefox?
- 12. Cómo agregar detectores de eventos a los objetos en un svg?
- 13. Cómo deshabilitar todos los eventos de clic de un diseño?
- 14. agregar múltiples detectores de eventos a un elemento
- 15. ¿Cómo escuchar todos los eventos de Apple?
- 16. NHibernate guardar/detectores de eventos de actualización: escucha de objeto secundario ahorra
- 17. ¿Es posible eliminar todos los controladores de eventos de un elemento determinado en javascript?
- 18. ¿Los detectores de eventos en jQuery se eliminan automáticamente cuando quita el elemento con .html()?
- 19. ¿Cómo eliminar todos los componentes de un JFrame en Java?
- 20. Obtener detectores de eventos asociados al nodo mediante addEventListener
- 21. ¿Cómo comprobar si hay detectores/manejadores de eventos de JavaScript conectados a un elemento/documento?
- 22. jQuery se unen todos los eventos en el objeto
- 23. ¿Cómo eliminar todos los elementos de ListBox?
- 24. ¿Cómo eliminar todos los artículos de ConcurrentBag?
- 25. ¿Cómo ignoro los suscriptores de eventos al serializar un objeto?
- 26. ¿Cómo puedo desactivar todos los eventos táctiles en todos los elementos secundarios de un ViewGroup?
- 27. Adición de detectores de eventos táctiles a MapView
- 28. ¿Es posible añadir a innerHTML sin destruir los detectores de eventos de los descendientes?
- 29. Oyente HTML5 EventSource para todos los eventos?
- 30. Cambie los elementos de 2 html y preserve los detectores de eventos en ellos
Básicamente un duplicado de éste, registran el día de hoy: http://stackoverflow.com/questions/1452539/flash-as3-eventdispatcher-any-way-of-getting -a-list-of-registered-listeners – Glenn
Pero la respuesta corta es que tienes que administrar la tuya usando un hash map o algo así. – Glenn