如何等待事件完成

时间:2011-03-13 16:36:02

标签: flex

我有一个子组件,用于在Parent中调度事件。父级中的事件调用我们的数据库。现在,该事件被解雇了孩子继续没有结果。如何让孩子等待数据库的结果b / f孩子继续?

在孩子身上:

<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' );

}

1 个答案:

答案 0 :(得分:0)

移动“//在这里做更多的东西,但我们需要暂停,直到我们从父”部分得到结果到另一部分。我假设您正在对具有回调的数据库进行远程调用。我不确定你使用的是哪种机制,但让我们假设一个RemoteObject。

您可以在分派的自定义事件上传递函数。代码的数据库部分可以将该函数指针附加到AsyncToken,或者只是将其添加到类实例中。然后当它返回结果时,您可以调用您作为事件的一部分传入的函数。异步编程的乐趣。

我建议查看Cairngorm和Swiz中使用的模式(Swiz是我的首选框架),因为他们在这些框架中进行数据库调用的方式正是您在这里尝试做的。

举个例子,你可以这样做:

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);
}