Okay, well that is a bit more complex.  To simplify the client code 
and the number of network round trips, I would suggest building up a 
list of the project ids and pass that as an argument to the fill 
request.  This way you only make one call to the remote destination 
and remove the complexity you will require in the client code which 
will be exacerbated if you decide to use paging later on.

Doing this on the client might look something like this:

// ...
private var totalTasks:ArrayCollection = new ArrayCollection();
// ...
taskDataService.addEventListener(DataServiceResultEvent.RESULT, 
resultHandler)
var token:AsyncToken = taskDataService.fill(...);
token.collection = tmpArray;
token.isLastFill = i == projectsArray.length;

function resultHandler(event:DataServiceResultEvent):void
{
   var collection:ArrayCollection = ArrayCollection
(event.token.collection);
   if (collection != null)
   {
       var cursor:IViewCursor = collection.createCursor();
       while (!cursor.afterLast)
       {
          totalTasks.addItem(cursor.current);
          cursor.moveNext();
       }

       if (event.token.isLastFill)
       {
           // do something with the final results
       }
   }
}

Hope that helps.


--- In [email protected], "jonathan_merey" <[EMAIL PROTECTED]> 
wrote:
>
> Actually, I want to concat the tmpArray of each loop ant return it 
then.
> 
> --- In [email protected], "jason_williams_mm" <jwilliams@>
> wrote:
> >
> > Each fill operation is asynchronous and so are the calls to 
Alert.show
> > ().  This means that code doesn't stop when these lines of code 
are 
> > executed it continues to run the very next line.
> > 
> > With the fill operation you will not get a valid length until the 
> > server responds to the request, however, during that time you 
will 
> > continue to execute more fill requests until all projects within 
the 
> > projectsArray have been iterated.
> > 
> > It is not clear what you are after here, if you want to display 
the 
> > length of the filled collection after the server has responded 
then 
> > you could do something like the following:
> > 
> > tmpArray.addEventListener(CollectionEvent.COLLECTION_CHANGE, 
> > collectionChangeHandler);
> > taskDataService.fill(...);
> > 
> > function collectionChangeHandler(event:CollectionEvent):void
> > {
> >    if (event.kind == CollectionEventKind.RESET)
> >    {
> >       // display the length using the event.target.length
> >    }
> > }
> > 
> > The RESET kind is only dispatched when the collection has been 
> > initially filled when managed by DataService.
> > 
> > There are more sophisticated approaches to this problem as well 
like 
> > using a responder with the AsyncToken returned from the fill() 
> > method, but, it is unclear if you are only after debugging 
> > information or not.  If you really only want debugg information 
then 
> > use the <mx:TraceTarget /> in your application MXML and a debug 
> > player then inspect the flashlog.txt or the console when using 
> > FlexBuilder in debug mode.
> > 
> > --- In [email protected], "jonathan_merey" <mereyj@> 
> > wrote:
> > >
> > > My problem is simple. I know each of my projects have tasks. If 
I
> > > delete the loop. The second Alert.show print the good length. 
But 
> > with
> > > the loop, the second Alert.show print 0 except for the last 
loop. 
> > If i
> > > delete the first Alert.show, the second print 0 even for the 
last
> > > loop.  I understood its due to a problem of exectution time but 
how
> > > can i do to do what i want. Thank you.
> > > 
> > > 
> > > Here is the code :
> > > 
> > > private function getTasks():void
> > > {
> > >     currentState='';
> > >     if (document.listProject.selectedIndex == -1)
> > >     {
> > >         var projectsArray:ArrayCollection =
> > > ArrayCollection(document.listProject.dataProvider);
> > >         var tmpArray:ArrayCollection = new ArrayCollection();
> > >         var i:int;
> > >         for (i = 0; i < projectsArray.length; i++)
> > >         {
> > >             mx.controls.Alert.show(projectsArray.getItemAt
(i).id);
> > >             taskDataService.fill(tmpArray, "tasksProject",
> > > [projectsArray.getItemAt(i).id]);
> > >             mx.controls.Alert.show(tmpArray.length.toString());
> > >             
> > >         }
> > >     }
> > >        else
> > >         taskDataService.fill
(document.tasksArray, "tasksProject",
> > > [document.listProject.selectedItem.id]);
> > >  }
> > >
> >
>





--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/flexcoders/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/flexcoders/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:[EMAIL PROTECTED] 
    mailto:[EMAIL PROTECTED]

<*> To unsubscribe from this group, send an email to:
    [EMAIL PROTECTED]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 

Reply via email to