как ждать окончания мероприятия - PullRequest
0 голосов
/ 13 марта 2011

У меня есть дочерний компонент, который отправляет событие в Parent. Событие в parent делает звонок в нашу базу данных. Прямо сейчас, событие запускается, и ребенок продолжает без результатов. Как сделать так, чтобы ребенок ждал результатов из базы данных, если ребенок продолжит?

у ребенка:

<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 голосов
/ 13 марта 2011

Переместите здесь "// сделать еще кое-что", но нам нужно сделать паузу, пока мы не получим результат из родительского "раздела, в другую часть. Я предполагаю, что вы делаете удаленный вызов вашей базы данных, которая имеет обратный вызов. Я не уверен, какой механизм вы используете, но давайте предположим, 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...