2012-05-16 28 views
1

對象A調用方法M的對象B,傳遞給它兩個回調兩種情況:cbYescbNoAS3語法通過變量名稱調用另一個類的方法? (連鎖回調)

B,反過來,執行Web服務的異步調用,唯一的回調創建對象C(API)實例:的B方法N。此回調將決定要調用哪個回調。

我店cbYescbNo作爲B的私人變量的類型Function

我該如何調用兩個回調?他們不是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調用的系統的模式。

回答

2

如果存儲cbYes和cbNo爲B.內部成員變量你可以叫他們像正常功能:

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

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

而不是使用回調這樣你就可以使用事件系統來達到同樣的效果的。您可以創建自定義事件並分派yes/no事件。

+0

謝謝@巴黎!我會看看事件系統。 – Serge