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/