Мне нужно вызвать FileReference.save () после завершения вызова веб-службы, но этот метод имеет ограничение: «В Flash Player этот метод можно успешно вызывать только в ответ на пользовательское событие (например, в обработчик события щелчка мыши или события нажатия клавиши). В противном случае вызов этого метода приводит к тому, что Flash Player выдает исключение Error. " (из документации здесь )
Это ограничение немного расплывчато. Означает ли это, что я могу вызывать метод FileReference.save () только из функции обработчика событий, которая зарегистрирована в качестве прослушивателя для определенных типов пользовательских событий? Если да, то какие именно пользовательские события являются действительными? (Возможно, есть событие, которое никогда не будет отправлено взаимодействием пользователя с моим приложением, и я мог бы зарегистрировать функцию-обработчик событий для этого типа события и сделать вызов save () из этой функции?)
Моя трудность заключается в том, что я не могу безопасно вызывать метод FileReference.save (), пока мой веб-сервис не вернется с данными, которые будут использоваться в качестве аргумента вызова метода FileReference.save (), поэтому это событие вызывает вызов FileReference.save () на самом деле является ResultEvent, а не пользовательским событием, и я опасаюсь отправлять новый (искусственный) тип пользовательского события, чтобы иметь возможность инициировать вызов FileReference.save (), если это определенно не пользовательское событие, которое никогда не будет отправлено в результате реального взаимодействия пользователя с моим приложением.
В двух словах, я сейчас делаю так: у меня есть функция, которая зарегистрирована как обработчик для нажатия кнопки. В этой функции я выполняю вызов веб-службы для получения данных с сервера. У меня также есть функция обработчика результатов, которая вызывается после завершения вызова веб-службы, и именно здесь я хочу вызвать метод 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 () внутри и вызов ее через интервал времени ожидания (чтобы дать время веб-службе завершиться), но я продолжаю сталкиваться с одной и той же ошибкой - возможно, такой подход не работает, поскольку вторая функция не зарегистрирована в качестве прослушивателя событий для типа события, используемого в качестве аргумента.
Я новичок в разработке Flex, поэтому, возможно, я просто не думаю об этом правильно. Если кто-то может предложить другой подход, я действительно ценю это. Заранее спасибо за ваши комментарии или предложения.
- Джеймс