2011-09-21 13 views
6

Básicamente tengo un menú donde no puede hacer clic en los encabezados, pero cuando pasa el puntero sobre el elemento del menú, puede seleccionar uno de los elementos desplegables. Cada uno de los elementos son g: etiquetas de ancla con ui campos asociados a ellos. Lo que esperaría que sucediera, es que cuando un usuario hace clic en uno de los elementos desplegables, mi uiHandler para ese campo se activaría. Incluso con la depuración y un punto de interrupción, nunca llega.GWT UiHandler para g: el ancla no está disparando

A continuación encontrará las principales áreas de preocupación en el código. Solo publicaré mis importaciones de gwt aquí, ya que se puede suponer que el resto es correcto debido a cero errores.

He aquí un fragmento de XML para tener una idea de lo que está pasando

<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> 
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' 
      xmlns:g='urn:import:com.google.gwt.user.client.ui' 
      xmlns:cpcw='urn:import:org.collegeboard.pa.gwt.client.widget'> 
    <cpcw:ExtendedHTMLPanel> 
     <ul> 
      <li ui:field="juniorHigh"><g:Anchor href="">Junior High</g:Anchor> 
      <ul> 
       <li><g:Anchor href="#" ui:field="juniorHighFall">Fall</g:Anchor></li> 
       <li><g:Anchor href="#" ui:field="juniorHighSpring">Spring</g:Anchor></li> 
       <li><g:Anchor href="#" ui:field="juniorHighSummer">Summer</g:Anchor></li> 
      </ul> 
     </li> 
    </ul> 
    </cpcw:ExtendedHTMLPanel> 
</ui:UiBinder> 

Y entonces aquí son las piezas de mi clase Java

importaciones

import com.google.gwt.core.client.GWT; 
import com.google.gwt.dom.client.LIElement; 
import com.google.gwt.event.dom.client.ClickEvent; 
import com.google.gwt.uibinder.client.UiBinder; 
import com.google.gwt.uibinder.client.UiField; 
import com.google.gwt.uibinder.client.UiHandler; 
import com.google.gwt.user.client.ui.Anchor; 

Ui campos

@UiField 
protected LIElement juniorHigh; 

@UiField 
protected Anchor juniorHighFall; 

@UiField 
protected Anchor juniorHighSpring; 

@UiField 
protected Anchor juniorHighSummer; 

Ui Handler

@UiHandler({"juniorHighFall","juniorHighSpring","juniorHighSummer"}) 
public void handleMenuClick(ClickEvent event) 
{ 
    DisplayUtil.displayAlertMessage(event.toString()); 
} 

Inicializar

@Override 
public void initializeBinder() 
{ 
    initWidget(ourUiBinder.createAndBindUi(this)); 
} 

Ahora, el UiHandler realidad nunca es golpeado. He tenido las etiquetas g: Anchor con y sin href, y también las he probado como g: Hipervínculo y g: Botón sin éxito. Es como si el UiHandler ni siquiera estuviera allí.

Cualquier ayuda sería muy apreciada, y también si crees que necesitarías algo más para solucionar problemas, ¡házmelo saber!

Gracias :-)

EDIT:

sólo para asegurarse de que esto era clara, el archivo de plantilla ui.xml que contenía este archivo ui.xml fue colocando esto en un div. Cuando reemplacé eso con un SimplePanel, todo funcionó con UiHandler.

Gracias por las respuestas!

Respuesta

6

Esto funciona y debería funcionar como lo tienes de forma predeterminada.

me he dado cuenta:

  • Sus referencias código "ourUiBinder"
  • Sus controles están envueltos en un "ExtendedHTMLPanel"

Estos parecen como clases personalizadas - quizá algo funky va en esas implementaciones?

Quizás puedas intentar envolver esos anclajes en un SimplePanel y usar el UiBinder predeterminado y ver si eso funciona. Si lo hace, es probable que tenga algo que ver con los controles personalizados que use. Si no ocurre, entonces algo extraño sucede, tal vez reinicie su IDE, etc.

+0

Sí, son clases personalizadas, y voy a comenzar a investigar en ellas para ver si hay algo funky pasando con ellos. ¡Gracias por la tranquilidad de que el código debería funcionar, porque eso me estaba volviendo loco! ¡También daré una oportunidad a SimplePanel para ver si eso funciona! ¡Gracias por la respuesta! –

+0

Además, me gustaría revocar esto, pero aún no tengo la suficiente reputación aquí para hacerlo ... (╯ ° □ °) ╯(┻━┻ –

+0

El SimplePanel hizo el truco! En la plantilla xml que contiene este ExtendedHTMLPanel, los elementos eran divs. Cambié los divs a SimplePanels y todos los UiHandlers funcionan correctamente. Todavía no tengo la reputación suficiente para expresar tu respuesta, ¡pero gracias! :) –

2

El archivo Plantilla xml tenía cada vista contenida en un elemento div.Filip-fku me recomendó que buscara en SimplePanels el código que publiqué, lo que me hizo ver el archivo de la plantilla y ver que no eran contenedores GWT, eran divs. ¡Tan pronto como los hice SimplePanels mis UiHandlers funcionaron como un encanto!

Gracias Filip-fku! g: ¡SimplePanel FTW!

Cuestiones relacionadas