Pergunta

Em GXT, métodos MessageBox são assíncronas, o que significa que a aplicação não "travar" enquanto a caixa de mensagem é exibida.

I utilizando um processo de KeyListener para entrar teclas pressionadas numa forma (para aumentar a facilidade de utilização, isto é, permitindo que a forma a ser submetida pela chave de entrada) e em seguida desactivando os campos do formulário enquanto a aplicação processa as credenciais do utilizador. Se eles estiverem incorretos, eu mostro um MessageBox.alert() e em seguida, reabilitar os campos do formulário. No entanto, desde alert() retorna imediatamente, os campos do formulário são imediatamente disponibilizados novamente, permitindo que o usuário para entrada de dados sem fechar o alerta.

A solução é usar um callback em alert(); no entanto, a entrar keypress não só faz com que o formulário para enviar, mas também faz com que o alerta para descartar imediatamente (como se tanto a forma ea caixa de mensagem estão processando a tecla enter). Como faço para manter a caixa de alerta aberto até o usuário pressiona entrar pela segunda vez ou clica no botão "Ok"?

Foi útil?

Solução

A chave é DeferredCommand fornecido por GWT :

Esta classe permite que você execute código após todos os manipuladores de eventos actualmente pendentes tenham concluído, utilizando os métodos addCommand(Command) ou addCommand(IncrementalCommand). Isso é útil quando você precisa executar fora do código do contexto da pilha atual.

if(!validate())
{
    DeferredCommand.addCommand(new Command() {
        public void execute() {
            MessageBox.alert("Error", "You must enter a username and password.", alertListener);
            return;
        }
    });
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top