public EventListener[] getEventListenersArrayCopy( EventTarget target, String type, boolean useCapture) { if (!parentRegistry.isValidEventTarget(target, type, false)) return null; // Nos ahorramos la búsqueda ItsNatNormalEventListenerListSameTarget targetList = (ItsNatNormalEventListenerListSameTarget) eventListenersByTarget.get(target); if (targetList == null) return null; return targetList.getEventListenersArrayCopy(type, useCapture); }
public void processExpunged(Object value) { ItsNatNormalEventListenerListSameTarget targetList = (ItsNatNormalEventListenerListSameTarget) value; LinkedList<Pair> listeners = targetList.getAllItsNatNormalEventListenersCopy(); if (listeners == null) return; // "listeners" es una copia por lo que es desechable e inmutable for (Pair pair : listeners) { ItsNatNormalEventListenerWrapperImpl listener = pair.getListenerWrapper(); parentRegistry.removeItsNatNormalEventListener(listener, false, true); // Pasamos updateClient = false para evitar llamar // getJSRender().removeEventListenerCode(listenerWrapper); // precisamente porque este método se llama cuando nadie sujeta el nodo // y por tanto no pertenece al Document. // Al menos evitamos que haya memory leaks en el servidor // aunque podrá haber en el cliente, para evitarlo han de desregistrarse // explícitamente los listeners cuando no se necesitan o el nodo DOM se va a perder } }
public int removeAllItsNatNormalEventListeners(EventTarget target, boolean updateClient) { ItsNatNormalEventListenerListSameTarget targetList = (ItsNatNormalEventListenerListSameTarget) eventListenersByTarget.get(target); if (targetList == null) return 0; LinkedList<Pair> listeners = targetList.getAllItsNatNormalEventListenersCopy(); if (listeners == null) return 0; // "listeners" es una copia por lo que es desechable e inmutable for (Pair pair : listeners) { ItsNatNormalEventListenerWrapperImpl listener = pair.getListenerWrapper(); parentRegistry.removeItsNatNormalEventListener(listener, updateClient, false); } targetList .removeAllItsNatNormalEventListeners(); // No hace falta pero por si acaso y para que quede // claro eventListenersByTarget.remove(target); return listeners.size(); // El número de listeners removidos }