2010-10-20 8 views
5

¿Cómo agregar un controlador de eventos en todos los elementos div con GWT? probé el siguiente código, pero las alertas de la ventana no se disparan hacia arriba (pero la clase "etvoila" ha establecido una):GWT: Agregue un controlador de eventos en todos los elementos div

private NodeList<Element> pageDIVElements; 
    public void initDiv() { 
    MyDIVEventHandler handler = new MyDIVEventHandler(); 
    pageDIVElements = Document.get().getElementsByTagName("div"); 
    for (int i = 0; i < pageDIVElements.getLength(); i++) { 
     Element elem = pageDIVElements.getItem(i); 
     elem.addClassName("etvoila"); 
     com.google.gwt.user.client.Element castedElem = (com.google.gwt.user.client.Element) elem; 
     DOM.setEventListener(castedElem, handler); 
    } 

class MyDIVEventHandler implements EventListener { 
    private Element divElement; 
    @Override 
    public void onBrowserEvent(Event event) { 

    Window.alert("Yeepee"); 
    if (event.equals(Event.ONMOUSEOVER)) { 
     Window.alert("ONMOUSEOVER"); 
     divElement = Element.as(((NativeEvent) event).getEventTarget()); 
     divElement.setPropertyString("background-color", "#C6D4E6"); 
    } else if (event.equals(Event.ONMOUSEOUT)) { 
     divElement = Element.as(((NativeEvent) event).getEventTarget()); 
     divElement.setAttribute("background-color", ""); 
    }else if (event.equals(Event.ONCLICK)) { 
     divElement = Element.as(((NativeEvent) event).getEventTarget()); 
     divElement.setAttribute("background-color", ""); 
     Window.alert("ONCLICK"); 
    } 
    } 
} 

Qué está mal en este método?

Respuesta

10

Parece que no se seleccionó para hundir los eventos que desea que se le notifique al oyente. En este caso, por ejemplo, agregaría lo siguiente al elemento initDiv o a los elementos secundarios correspondientes.

DOM.sinkEvents(elem, Event.ONCLICK | Event.ONMOUSEOUT | Event.ONMOUSEOVER); 
+0

¿Cómo utilizar su solución en el código? No puedo hacer que funcione. – djondal

+0

Agregue lo siguiente antes de la línea "DOM.setEventListener (castedElem ..." : DOM.sinkEvents (castedElem, Event.ONCLICK | Event.ONMOUSEOUT | Event.ONMOUSEOVER); –

+0

Debe enviar elem a com.google. gwt.user.client.Element –

2

forma similar a this question, se puede envolver en una Label.

NodeList<Element> elems = Document.get().getElementsByTagName("div"); 
for (int i = 0; i < elems.getLength(); i++) { 
    Element elem = elems.get(i); 
    Label l = Label.wrap(elem); 
    l.addClickHandler(new ClickHandler() { 
    @Override 
    public void onClick(ClickEvent event) { 
     Window.alert("yay!"); 
    } 
    }); 
} 
+0

El código compila (al corregir get (i) a getItem (i)), pero al ejecutar, se produce el siguiente error java.lang.AssertionError: Un widget que tiene un widget principal existente puede no se debe agregar a la lista de exclusión en com.google.gwt.user.client.ui.Label.wrap (Label.java:79). ¿Es realmente posible incluir este elemento en una etiqueta? – djondal

Cuestiones relacionadas