Pregunta

En GXT, métodos MessageBox son asíncronas, lo que significa que la aplicación no "bloquear" mientras se muestra el cuadro de mensaje.

I utilizando un KeyListener para procesar introducir pulsaciones de teclas en una forma (para aumentar la facilidad de uso, es decir, permitiendo que la forma que debe presentar la tecla ENTER) y posteriormente deshabilitar los campos del formulario, mientras que la aplicación procesa las credenciales del usuario. Si son incorrectos, se muestra un MessageBox.alert() y luego volver a habilitar los campos del formulario. Sin embargo, puesto alert() vuelve inmediatamente, los campos de formulario se hacen inmediatamente disponible otra vez, permitiendo al usuario datos de entrada sin cerrar la alerta.

La solución es utilizar una devolución de llamada en alert(); Sin embargo, la pulsación de tecla entrar no sólo hace que el formulario para enviar, pero también hace que la alerta de despedir de inmediato (como si tanto la forma como el cuadro de mensaje están procesando la tecla Enter). ¿Cómo puedo evitar que el cuadro de alerta abierta hasta que el usuario pulsa entrar por segunda vez o hace clic en el botón "OK"?

¿Fue útil?

Solución

La clave es DeferredCommand proporcionado por GWT :

  

Esta clase le permite ejecutar código después de todo, actualmente pendientes controladores de eventos han completado, utilizando los métodos addCommand(Command) o addCommand(IncrementalCommand). Esto es útil cuando se necesita para ejecutar código fuera del contexto de la pila actual.

if(!validate())
{
    DeferredCommand.addCommand(new Command() {
        public void execute() {
            MessageBox.alert("Error", "You must enter a username and password.", alertListener);
            return;
        }
    });
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top