2013-07-24 5 views
0

PureMVC를 사용하여 Adobe AIR 응용 프로그램을 작성하고 있습니다.Flex PureMVC에서 모든 서비스 호출이 값을 반환 할 때까지 기다리는 것이 가장 좋은 방법입니다.

ViewStack을 사용하여 페이지 기반 응용 프로그램보기를 가지고 있으며 사용자가이 단추를 클릭하는 것과 같은 방식으로이 페이지를 탐색한다고 가정 해보십시오.

지금 예를 들어 나는 계정 Infromation 페이지가 인스턴스화 또는 보였다 때 다시 WebService에에서 (예를 이메일, 계정 잔액이름에 대한) 데이터를로드해야하고, 데이터가있는 경우 반환 내 계정 정보 페이지의 적절한 라벨에 표시하고 싶습니다.

문제는이 세 가지 웹 호출을 실행할 때 각각 다른 시간에 다른 resultEvent를 반환한다는 것입니다. 어떤 정보를 얻는 가장 좋은 방법은 궁금 무엇입니까 모든 서비스의 반환 된 결과, 그래서 나는 결국 한 번에 (그리고 어쩌면이 일부 로딩 화면 재생하기 전에) 모든 결과를 표시 할 수 있습니다.

+0

간단한 방법은 데이터로드를 시작하기 전에 모달 popUp을 만드는 것입니다. 각 ResultEvent에서 증가하는 간단한 카운터를 추가하십시오. 카운터가 모든 결과가 준비되었음을 나타내는 숫자에 도달하면 popUp을 파괴/숨기기 만하십시오 (카운터를 재설정하십시오). –

답변

0

정말 PureMVC에 대해 잘 모르겠지만 as3commons - 비동기 라이브러리가 비동기 호출을 관리하기에 좋은 곳입니다 및 프레임 워크 설치에 경우

http://as3commons.org/as3-commons-async/

을 잘 작동합니다, 당신 RPC를 캡슐화하는 IOperation 또는 IAsyncCommand (즉시 또는 지연된 작업을 실행하려는 경우에 따라 다름)을 구현하는 3 개의 클래스를 만들 수 있습니다. 그런 다음 새로운 CompositeCommand을 만들고 대기열에 작업을 추가하기 만하면됩니다. 모두 완료되면, CompositeCommandOperationEvent.COMPLETE

이 BTW, 라이브러리도 포함 발사 몇 가지 사전 구현 당신이뿐만 아니라 as3commons-asyc 플렉스 패키지를 다운로드 할 때 등의 HTTPRequest 같은 일반적인 플렉스 운영,. 나는이 방법으로 그것을 할 것

0

:

  1. 세 가지 정보 개체 (EMailProxy, BalanceProxy, UsernameProxy)의 각각에 대한 프록시를 생성;
  2. WebService ("public class WSConnector implements IResponder {...}"와 같은)와의 상호 작용을 처리하는 대리인 클래스를 만듭니다.이 클래스는 프록시가 end ws-methods를 호출하는 데 사용합니다.
  3. 세 가지 결과 (CoordProxy)를 모두 조정하는 프록시를 만듭니다.
  4. 세 가지 호출을 모두 조정할 중재자를 선택하십시오 (예 : ApplicationMediator가 수행 할 수 있음).
  5. 모든 프록시 결과에 대한 알림 상수를 생성합니다 (GET_EMAIL_RESULT, GET_BALANCE_RESULT, GET_USERNAME_RESULT, COORD_RESULT).
  6. ApplicationMediator가 모든 4 가지 알림을 받도록하십시오.

    • 세 가지 결과가 모두 표시 될 때까지 기다릴 필요가 없으며 일부 오류 및 해석에 대한 준비가되어 있어야합니다. 그래서 간단한 카운터가 너무 약할 수 있습니다.

전체 워크 플로우는 다음과 같이 수 : 사용자가 프로세스를 시작

  1. 을;
  2. 일부 조정자는 GUI 구성 요소에서 이벤트를 가져오고 DO_TRIPLECALL과 같은 알림을 보냅니다.
  3. ApplicationMediator가이 알림을 포착하고 CoordProxy의 상태를 삭제하고 프록시에서 3 가지 방법 (getEMail, getBalance, getUsername)을 모두 호출합니다.
  4. 응답이 비동기 적으로 발생합니다. 각 프록시는 위임자로부터 응답을 받고 자체 데이터 객체를 변경하며 적절한 알림을 보냅니다.
  5. ApplicationMediator는 이러한 알림을 포착하고 CoordProxy의 상태를 변경합니다. 세 가지 응답이 모두있는 경우 (모두 성공적 일 수는 없음) CoordProxy는 전체 결과와 함께 알림을 보냅니다.

나는 중개자를 통한 그러한 상호 작용을하는 것이 최선의 방법이 아니라는 것을 알고 있습니다. 초기 아이디어는 모든 "비즈니스 로직"결정에 명령을 사용하는 것이 었습니다. 그러나 관료제를 만드는 것은 너무 지루할 수 있습니다.

도움이되기를 바랍니다. 나는 당신의 해결책을 알고 기꺼이 여기에서 토론하게되어 기쁩니다.

+0

나는 더 간단한 메커니즘을 사용했다. 나는 PureMVC util 클래스 인 AsyncCommand와 AsyncMacroCommand를 사용했다. 각 요청마다 별도의 AsyncCommand를 만들고, 실행하는 동안 요청 결과에 대한 AsyncToken 리스너를 만들었습니다. 명령이 결과 이벤트를 얻은 후에는 onComplete() 함수를 호출하여 AsyncMacroCommand에서 다른 명령을 시작했습니다. 확실히 좋은 아이디어는 아니지만 매우 직설적이며 작업을 완료하고있었습니다. – MyFantasy512