Webサービスの呼び出しが完了した後にFileReference.save()を呼び出す必要がありますが、このメソッドには制限があります。「Flash Playerでは、このメソッドはユーザーイベント(たとえば、イベントハンドラー)に応答してのみ正常に呼び出すことができます。マウスクリックまたはキープレスイベントの場合)。それ以外の場合、このメソッドを呼び出すと、FlashPlayerがエラー例外をスローします。」(ここのドキュメントから)
この制限は少しあいまいです。特定の種類のユーザーイベントのリスナーとして登録されているイベントハンドラー関数内からのみFileReference.save()メソッドを呼び出すことができるということですか?もしそうなら、正確にどのユーザーイベントが有効ですか?(おそらく、ユーザーがアプリケーションを操作してもディスパッチされないイベントがあり、そのイベントタイプのイベントハンドラー関数を登録して、その関数内からsave()呼び出しを行うことができますか?)
私の難しさは、WebサービスがFileReference.save()メソッド呼び出しの引数として使用されるデータを返すまでFileReference.save()メソッドを安全に呼び出すことができないため、FileReferenceをトリガーするイベントです。 save()呼び出しは、実際にはユーザーイベントではなくResultEventであり、FileReference.save()呼び出しをトリガーできるようにするために、新しい(偽の)ユーザーイベントタイプをディスパッチするのは嫌です。私のアプリケーションとの実際のユーザーインタラクションの結果としてディスパッチされることはありません。
一言で言えば、私が今していることはこれです:私はボタンクリックのハンドラーとして登録されている関数を持っています。この関数では、サーバーからデータをフェッチするためにWebサービスを呼び出します。また、Webサービスの呼び出しが完了すると呼び出される結果ハンドラー関数があります。この時点で、データを保存する準備ができていることがわかっているので、FileReference.save()メソッドを呼び出します。ファイル。しかし、前述の制限により、これを行うことができません。エラーが発生します。
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.
FileReference.save()呼び出しを使用して2番目のマウスクリックイベントハンドラー関数を作成し、タイムアウト間隔の後に呼び出す(Webサービスが完了するまでの時間を与える)など、これを回避するために多くのことを試みましたが、同じエラーが発生します。2番目の関数が引数として使用されるイベントタイプのイベントリスナーとして登録されていないため、このアプローチは機能しない可能性があります。
私はFlex開発に不慣れなので、おそらくこれについて正しい方法で考えていません。誰かが別のアプローチを提案することができれば、私はそれを本当に感謝します。コメントや提案を事前に感謝します。
-ジェームズ