Советы по реализации элемента управления «Пожалуйста, подождите» для приложения Flex - PullRequest
2 голосов
/ 19 ноября 2008

Какой разумный способ сделать элемент управления «пожалуйста, подождите» для приложения Flex для длительных операций, таких как вызов веб-службы.

Я не спрашиваю о графической части, а только о «контроллере». Как я должен вызвать это и скрыть это. Я планирую сделать простой холст с текстом.

Например:

  • могу ли я каким-то образом перехватить все вызовы веб-службы - и не нужно активировать ее для каждой веб-службы
  • как мне добавить его на холст. должен ли он быть добавлен в «stage» как компонент верхнего уровня?
  • если на нем есть кнопка «отменить», чтобы отменить запрос веб-службы, если это занимает слишком много времени. это звучит довольно сложно, потому что я даже не уверен, смогу ли я прекратить выполнение асинхронного веб-запроса?

К вашему сведению: это приложение для отчетов, поэтому следует ожидать длительных запросов

Ответы [ 2 ]

1 голос
/ 19 ноября 2008

Один из способов, которыми я занимался в прошлом, - это иметь глобальное целое число и увеличивать / уменьшать значение в зависимости от запущенных веб-сервисов. Когда счетчик был равен 0, я скрывал загрузочный текст, а когда он был больше 0, я отображал загрузочный текст. Вот упрощенная версия этого:


<mx:Application>
    <mx:Script>
        [Bindable]public var ws_count:int = 0;
    </mx:Script>
    <mx:Label text = "loading..." visible="{ws_count > 0}" />
</mx:Application>


У меня был маленький вспомогательный класс для управления глобальным счетчиком:


package ws {
    import mx.core.Application;
    public class WSCounter {
        public static function sent():void {
            Application.application.ws_count += 1;
        }
        public static function receive():void {
            Application.application.ws_count -= 1;
        }
    }
}

Тогда все, что нужно сделать, это вызвать вспомогательную функцию при вызове веб-службы ... например:


import ws.WSCounter;
import mx.rpc.http.HTTPService;

var srv:HTTPService = new HTTPService();
srv.url = "http://localhost/service.py";
srv.addEventListener(ResultEvent.RESULT,function(event:ResultEvent):void {
    WSCounter.receive();
});
srv.send();
WSCounter.sent();

Я всегда думал, что есть лучший способ сделать это, как вы сказали, есть какой-то тип хука, чтобы определить, работает ли служба ... Я с нетерпением жду других ответов в этом посте ...

0 голосов
/ 22 ноября 2008

Если вы используете такую ​​среду, как Cairngorm или аналогичную, которая реализует MVC, простой подход заключается в обновлении «глобальной» переменной (через объект Singleton), которая связана с видимым компонентом пользовательского интерфейса (т. Е. TitleWindow в основном mxml или чем-либо еще) приписывать. переменная будет обновлена ​​до true во время execute () и false при достижении методов обратного вызова результата или сбоя.
Вы можете добавить кнопку «отмена», которая сбрасывает переменную в «ложь», но это не означает, что сервер остановит асинхронный вызов. я не знаю, как остановить это и предотвратить возвращение данных от отмененного вызова метода. бросив быстрый взгляд на ASDoc, у remoteobject есть метод disconnect (), который отбрасывает все ожидающие запросы ответчики. Я не уверен, что это элегантный / правильный способ сделать это
если вы не хотите устанавливать его для каждого вызова веб-службы, вы можете захотеть использовать пользовательскую цепочку событий (см. http://www.herrodius.com/blog/80 для идей), так что вам нужно будет установить ее только один раз, если вы вызываете одну или несколько служб .

...