2012-05-16 3 views
1

개체 A은 개체 BM 메서드를 호출하고 두 경우에 두 개의 콜백 (cbYescbNo)을 전달합니다. B 방법 N을 : 다른 클래스의 메서드를 변수 이름으로 호출하는 AS3 구문? (연결된 콜백)

B

은 다시에만 콜백 객체에게 C (API) 인스턴스를 생성, 웹 서비스 비동기 호출을 수행한다. 이 콜백은 호출 할 두 콜백 중 어떤 것을 결정합니다.

cbYescbNoFunction의 B 's 개인용 변수로 저장됩니다.

어떻게 콜백을 호출 할 수 있습니까? 그들은 B의 자식이 아니므로 구문 B[cbYes]();이 아닙니다. 언리얼 코드 예제 : 나는 함께이 샘플 코드를 넣는 동안

class A { 
    public function Smth() { 
     var instB:B = new B(cbYes, cbNo); 
    } 
    public function cbYes(e:Event) { doSomething(); } 
    public function cbNo(e:Event) { doSomething(); } 
} 

class B { 
    private var _cb1:Function; 
    private var _cb2:Function; 
    public function B(cb1, cb2) { 
     _cb1 = cb1; _cb2 = cb2; 
     var worker:C = new C(); 
     C.apiMethod123(cbAfterCall); 
    } 
    public function cbAfterCall(Result:*) { 
     if(Result = 1) { 
      // here I need to call callback from _cb1 
     } else { 
      // here I need to call callback from _cb2 
     } 
    } 
} 

class C { 
    private var _Callback:Function; 
    public function C() { } 
    public function apiMethod123(cb:Function) { 
     this._Callback = cb; 
     // create a URLLoader or a Loader and do a web service call 
    } 
    public function urlCallback(e:Event) { 
     // parse response 
     this._Callback(); 
    } 
} 

확인은, 난 이미 API를 호출 노동자와 함께이 문제를 해결 실현! :-) 더 많은 수면을 가지고있어.

AfterQuestion :이 아키텍처 방식이 실제로 잘못된 것입니까? 조언을 좀 더 잘 해주시거나 동시 비동기 API 호출이 사용되는 시스템에 적합한 패턴을 제공해주십시오. 당신이 나 내부 멤버 변수로 cbYes 및 cbNo를 저장하는 경우

답변

2

당신은 정상적인 기능처럼 그들을 호출 할 수 있습니다

public function foo(cbYes:Function,cbNo:Function):void 
{ 
    this.cbYes = cbYes; 
    this.cbNo = cbNo; 
} 

public function bar():void 
{ 
    cbYes(); 
} 

를 대신 같은 결과를 달성하기 위해 이벤트 시스템을 사용하여 다음과 같이 콜백을 사용하는. 사용자 정의 이벤트를 작성하고 예/아니오 이벤트를 디스패치 할 수 있습니다.

+0

@ 바리스 감사합니다! 이벤트 시스템을 살펴 보겠습니다. – Serge

관련 문제