2011-03-13 6 views
0

부모 이벤트를 전달하는 하위 구성 요소가 있습니다. 부모 이벤트가 데이터베이스를 호출합니다. 지금 당장 이벤트가 실행되지 않고 & 아이가 결과없이 계속됩니다. 자녀가 계속해서 데이터베이스에서 결과를 기다리도록하려면 어떻게해야합니까? 아이이벤트가 완료 될 때까지 대기하는 방법

:

부모의
<fx:Script> 
<![CDATA[ 
dispatchEvent(new Event("getDBcontents")); // dispatch the event in the parent 

// do some more stuff here but we need pause until we get the result from the parent 

    ]]> 
</fx:Script> 

:

public function getDBcontents(event:Event):void { 

otherChild.getResult.token = otherChild.childRet.getContents('userID.text'); 

} 

답변

0
가 이동

은 "// 여기에 몇 가지 더 많은 물건을하지만, 우리는 우리가 부모로부터 결과를 얻을 때까지 일시 중지 할 필요가있다"는에 섹션 다른 부분. 콜백이있는 데이터베이스에 원격 호출을하고 있다고 가정합니다. 어떤 메커니즘을 사용하고 있는지 잘 모르겠지만 RemoteObject를 가정 해 봅시다.

디스패치하는 사용자 지정 이벤트에 함수를 전달할 수 있습니다. 코드의 데이터베이스 섹션은 해당 함수 포인터를 AsyncToken에 첨부하거나 클래스 인스턴스에 추가 할 수 있습니다. 그런 다음 결과가 돌아 오면 이벤트의 일부로 전달한 함수를 호출 할 수 있습니다. 비동기 프로그래밍의 즐거움.

저는 Cairngorm과 Swiz (Swiz가 선호하는 프레임 워크입니다)에서 사용 된 패턴을 보도록 권장합니다.이 프레임 워크에서 데이터베이스 호출을 수행하는 방식이 여기에서하려는 작업과 정확히 일치합니다. 예를 들어

, 당신은 같은 것을 할 수있다 : 나는 콜백 승/PHP는 서비스를 사용하고

dispatchEvent(new MyCustomEvent("getDBcontents", callBackFunction)); 

private function callBackFunction(stuffToProcess:Object):void { 
    //do more stuff here after the stuff is returned 
} 


//first create MyCustomEvent class extending Event 

//Then you need something to handle the event, you can build the event listener yourself, or use something like Swiz to make your life easier 

//here is your event handler that you can call yourself, or assign through Swiz Cairngorm 

var st:Function; 
public myEventHandler(event:MyCustomEvent):void { 
    st = event.callBackFunction; //your param on your custom function 
    var token:AsyncToken=this.service.doSomething(); 
    var responder:mx.rpc.Responder=new mx.rpc.Responder(genericResultsHandler, faultHandler); 
    token.addResponder(responder); 
} 

genericResultsHandler(result:ResultEvent):void{ 
    if (st != null) 
    st(result.data); 
} 
+0

. "결과가 돌아 오면 이벤트의 일부로 전달한 기능을 호출 할 수 있습니다."... 어떻게하면됩니까? –

+0

나는 Swiz와 Cairngorm을 모두 들여다 보았지만 잘 따라갈 수 없었다. 데이터베이스에서 결과를 다시 얻을 때까지 스크립트를 "강제 실행"할 방법이 없습니다. –

+0

아니요, 원하는대로 코드를 '일시 중지'할 수있는 방법이 없습니다. 네트워크 호출은 actionscript에서 비동기 적이므로 콜백 메커니즘을 제공해야합니다. 이 콜백 메카니즘은 찾고자하는 의사 '일시 정지'를 제공합니다. Swiz를보기 위해 돌아가는 것이 좋습니다. Swiz가 당신이하고자하는 일에 대해 매우 쉽게 구성 할 수 있도록 도와 줄 수 있기 때문입니다. – Scott

관련 문제