2011-09-12 7 views
10

En un escenario de programación, necesitaba verificar si mi cuadro de texto GWT estaba enfocado o no. Terminé agregando un booleano y un par de Focus & BlurHandler para mantener manualmente el estado de enfoque que me hace preguntarme por qué no hay tal método que devuelve si un componente enfocable se centra en gwt?¿Por qué no hay isFocused() en GWT?

+1

Nadie aquí puede responder esto. A menos que una de las personas de google que lo diseñó venga, lo que sería bastante improbable. –

+2

Son más de lo que crees –

+0

¿Qué hay de malo con el uso de un FocusHandler? – helpermethod

Respuesta

11

Porque no había ninguna forma de navegador cruzado de hacerlo hasta hace unos años (Firefox 3, Safari 4, para apuntar a los últimos jugadores en el juego con soporte agregado document.activeElement).

GWT todavía es oficialmente compatible con [1] Safari 3 (creo que el soporte de Safari 2 ha quedado obsoleto) y tal vez incluso Firefox 2 (sin complemento DevMode, pero eso no significa que el navegador no sea compatible: Opera es compatible pero tampoco tiene DevMode), por lo que no es posible proporcionar una función que funcione en todos los navegadores admitidos.

Por último, pero no por ello menos importante, creo que nadie ha solicitado una mejora en el rastreador de problemas (al menos no encontré ninguno); y como dijiste, ya puedes hacerlo hoy usando FocusHandler/BlurHandler (que funciona en varios navegadores).

[1] http://code.google.com/webtoolkit/doc/latest/FAQ_GettingStarted.html#What_browsers_does_GWT_support? Creo que esa página está un poco desactualizada, ya que todavía incluye Firefox 1.0, cuyo soporte (user.agent = gecko, vs. gecko1_8) se ha eliminado en GWT 2.1.0, y no incluye IE9, cuyo soporte tiene se ha agregado en GWT 2.3.0, y por último pero no menos importante, creo que solo se admite la última versión de Opera, mientras que la lista habla de Opera 9.

+0

Para obtener una vista más amplia de qué navegadores lo admiten, consulte, por ejemplo, MDN: https://developer.mozilla.org/en-US/docs/Web/API/document.activeElement Hoy parece que todos los navegadores principales lo admiten (IE 4+, Chrome 2+, etc.), por lo que es bastante seguro usarlo. – PhiLho

1

Para encontrar qué widget tiene foco, no sé si ya tienes solución Como un principiante a GWT, propongo mi solución para compartir:

  1. Declarar ámbito privado en el objeto, como step 1

  2. Crear manejador de enfoque 'focusedWidget' para el widget, esto es TextBox clase. En el bloque OnFocus, simplemente asigne el widget a 'focusedWidget'. Puede agregar este tipo de evento a cada widget que se pueda enfocar. ! [paso 2] [2]

  3. Eso es todo. Cada widget que haya vinculado al evento de enfoque se establecerá en "widget enfocado" cada vez que se enfoque. Entonces podemos usar 'focusedWidget' para determinar qué widget actual está enfocado. ! [paso 3] [3]

Lo pruebo en JUnit, ¡funciona! see image of snippet here Espero que ayuden.

+0

esto es útil, pero también necesitará agregar controlador de desenfoque a cada elemento, para que no se detecte la situación de ningún elemento actualmente enfocado y el valor del widget enfocado se pueda establecer como nulo. – Joel

Cuestiones relacionadas