O FileReference.save () do Flex só pode ser chamado em um manipulador de eventos do usuário - como posso contornar isso?

Preciso chamar FileReference.save () após a conclusão de uma chamada de serviço web, mas este método possui uma restrição: "No Flash Player, você pode chamar esse método apenas com êxito em resposta a um evento do usuário (por exemplo, em um manipulador de eventos caso um clique do mouse ou evento de pressionamento de tecla). Caso contrário, a chamada desse método resulta no Flash Player lançando uma exceção de Erro ". (da documentaçãoaqui)

Essa restrição é um pouco vaga. Isso significa que só posso chamar o método FileReference.save () de dentro de uma função de manipulador de eventos registrada como ouvinte para certos tipos de eventos do usuário? Em caso afirmativo, exatamente quais eventos do usuário são válidos? (Talvez haja um evento que nunca será despachado pela interação do usuário com meu aplicativo e eu possa registrar uma função de manipulador de eventos para esse tipo de evento e fazer a chamada save () de dentro dessa função?)

Minha dificuldade é que não posso chamar com segurança o método FileReference.save () até que meu serviço Web retorne com os dados que serão usados como argumento da chamada do método FileReference.save (), portanto, o evento que aciona o FileReference. A chamada save () é na verdade um ResultEvent em vez de um evento do usuário, e eu lamento enviar um novo tipo de evento do usuário (falso) para poder acionar a chamada FileReference.save (), a menos que seja definitivamente um evento do usuário que nunca seria despachado como resultado da interação real do usuário com meu aplicativo.

Em poucas palavras, o que estou fazendo agora é o seguinte: tenho uma função que é registrada como manipulador para um clique no botão. Nesta função, faço minha chamada de serviço da web para buscar dados do servidor. Também tenho uma função de manipulador de resultados que é chamada quando a chamada de serviço da web é concluída e é aqui que desejo chamar o método FileReference.save (), pois é nesse ponto que eu sei que os dados estão prontos para serem salvos em um arquivo. Mas a restrição acima mencionada está me impedindo de fazer isso - recebo um erro:

Error #2176: Certain actions, such as those that display a pop-up window, 
may only be invoked upon user interaction, for example by a mouse click 
or button press.

Eu tentei muitas coisas para contornar isso, como criar uma segunda função de manipulador de eventos de clique com o mouse com a chamada FileReference.save () dentro e chamá-la após um intervalo de tempo limite (para dar tempo ao serviço da Web para concluir), mas continuo executando o mesmo erro - talvez essa abordagem não funcione, pois a segunda função não está registrada como ouvinte de eventos para o tipo de evento usado como argumento.

Eu sou novo no desenvolvimento do Flex, então talvez eu não esteja pensando sobre isso da maneira certa. Se alguém puder sugerir outra abordagem, eu realmente aprecio isso. Agradecemos antecipadamente por seus comentários ou sugestões.

--James

questionAnswers(6)

yourAnswerToTheQuestion