2009-09-16 15 views
8

Estoy construyendo una aplicación web AJAX con GWT, y quiero usar el botón derecho para varias cosas, al igual que en una aplicación de escritorio. Sin embargo, al hacer clic con el botón derecho se produce el menú contextual de la Web estándar y nunca se llama a la función onClick (evento ClickEvent). ¿Alguien ha descubierto cómo hacer que esto funcione? ¡Gracias!Haz clic derecho en GWT?

+0

si se trata de ningún tipo de ayuda sin impedir navegador por defecto menú del botón derecho, se puede tomar un clic derecho mediante el uso de mouseDownHandler en lugar de clickHandler. – pistolPanties

Respuesta

4

Resulta que puede hacerlo extendiendo DeckPanel. Aquí hay una discusión excelente, junto con una buena demostración que demuestra que funciona.

http://whatwouldnickdo.com/wordpress/370/gwt-right-click-context-menu/

+0

eso es eficaz y causará problemas en aplicaciones complejas con muchos objetos representados en la pantalla ya que no está utilizando el motor de eventos centrales dentro de gwt. –

2

Aunque hay maneras de hacerlo creo que el equipo de GWT tuvo un debate acerca de esto y decidió que permite el botón derecho en una aplicación web era algo malo y así tomó la decisión consciente de no apoyarlo. El argumento era que el clic derecho debería seguir funcionando como se esperaba (mostrar el menú contextual del botón derecho del navegador del servidor) y anular esto estaba rompiendo ese comportamiento esperado y eso sería una mala práctica. Si bien he tenido instancias en las que un menú contextual con el botón derecho sería útil, generalmente tiendo a estar de acuerdo con la decisión del equipo de GWT.

+5

No podría estar más en desacuerdo. Supongo que la mayoría de los desarrolladores de GWT usan GWT en un intento de emular mejor la experiencia de escritorio. Y eso incluye clics contextuales (derechos). Existen muchas aplicaciones empresariales en las que tiene sentido utilizar los clics con el botón derecho. –

+0

Sé a lo que se refiere, me sentí bastante frustrado porque al principio me faltaba el clic derecho, pero después de leer el argumento del equipo de GWT, lentamente me di la vuelta. –

+0

@Daniel Vaughan: punto interesante. Yo votaría esto si agregaras un enlace a la discusión de GWT que mencionas. –

7

easy peasy, agregue un detector en el manejador de contexto que mostrará un widget en función del lugar donde el usuario haga clic con el botón derecho. https://confluence.clazzes.org/pages/viewpage.action?pageId=425996

class MyWidget extends Composite implements ContextMenuHandler { 

    // just an example, use a meaningful Widget here... 
    private Widget base; 

    private PopupPanel contextMenu; 


    public MyWidget() { 
    // initialize base widget, etc... 

    this.contextMenu = new PopupPanel(true); 
    this.contextMenu.add(new HTML("My Context menu!")); 
    this.contextMenu.hide(); 

    initWidget(this.base); 

    // of course it would be better if base would implement HasContextMenuHandlers, but the effect is the same 
    addDomHandler(this, ContextMenuEvent.getType()); 
    } 


    public void onContextMenu(ContextMenuEvent event) { 
    // stop the browser from opening the context menu 
    event.preventDefault(); 
    event.stopPropagation(); 


    this.contextMenu.setPopupPosition(event.getNativeEvent().getClientX(), event.getNativeEvent().getClientY()); 
    this.contextMenu.show(); 
    } 

} 

por último tendrá que desactivar el menú completo para navegadores sobrecarga de este tipo de menú contextual. Eso debería funcionar en todos los navegadores excepto Opera. pero la verdad es que se utiliza en estos días que Neways^_______^

<body oncontextmenu="return false;"> 
+0

Recibe un voto favorable para . ¡Esa parte me estaba volviendo loco! – Jamie

+0

¡Esa es la magia! ¡No tienes idea de cuántos años tardé en darme cuenta de eso antes de que existieran los sofisticados frameworks JS! –

Cuestiones relacionadas