Hi All,

         I think I am able to solve the problem.
   The issue was that at every updates I was modifying the dataprovider
which was cast as array collection.
   Once filter is applied the arraycollection keeps only the filtered rooms.
So, even though a room might be
   present in the unfiltered source array, it will get added to the
dataprovider if it was not present in the filtered
   dataprovider.
        To remove this, I have changed my update code to change the
underlying array rather than modifying
   the arraycollection.

   Thanks,
    Rohit

On Tue, Jun 2, 2009 at 8:50 AM, Tim Hoff <timh...@aol.com> wrote:

>
>
> > I update the corresponding item in the dataprovider using setItemAt. (I
> > typecast dataprovider as Arraycollection).
> > Recently I added some filters to the room list using
> > filterfunction. As soon as I start applying filters, I see few items
> getting
> > duplicated in the list. Some items exist with old values as well as new
> > values.
>
> Ok, so your indexes are not synchronized; returned data is getting set on
> the wrong items.  How are you determining the correct index when using
> setItemAt()?  If you're storing the position index when the ArrayCollection
> is un-filtered, and then filtering, the old index may not be the same as the
> new index in the filtered ArrayCollection.  You can loop through the
> ArrayCollection and check the item's id field against the updated return
> item:
> *
>
> public
> * *function* getRoomResult( newRoomVO : RoomVO ) : *void
> *{
> *     for* *each* ( *var* oldRoomVO : RoomVO *in* rooms )
>      {
> *          if* ( newRoomVO.id == oldRoomVO.id )
>           {
>                rooms.setItemAt( newRoomVO, getItemIndex( oldRoomVO ) );
> *               return*;
>           }
>      }
> }
>
> However, this wouldn't update any items that were not included in the
> ArrayCollection, because of a filter.  Updating the source Array itself
> would also do the trick.  But, you would have to re-cast the
> ArrayCollection after an update.
>
> Just a few thoughts,
> -TH
>
>
> --- In flexcoders@yahoogroups.com, "Tim Hoff" <timh...@...> wrote:
> >
> >
> > Sounds like your itemRenderer might not be clearing out old data
> > correctly. Check out Question 2 in Amy's FAQ:
> >
> > http://www.magnoliamultimedia.com/flex_examples/Amys_Flex_FAQ.pdf
> > <http://www.magnoliamultimedia.com/flex_examples/Amys_Flex_FAQ.pdf>
> >
> > -TH
> >
> > --- In flexcoders@yahoogroups.com, Rohit Sharma rohit.sharma1982@
> > wrote:
> > >
> > > Hi All,
> > >
> > > I am stuck up with this problem. Please provide some insight into
> > > it.
> > >
> > > " I have a list component which shows all the game rooms currently
> > existing.
> > > As soon as some property of the room changes,
> > > I update the corresponding item in the dataprovider using setItemAt.
> > (I
> > > typecast dataprovider as Arraycollection).
> > > Recently I added some filters to the room list using
> > > filterfunction. As soon as I start applying filters, I see few items
> > getting
> > > duplicated in the list. Some items exist with old values as well as
> > new
> > > values.
> > > I also tried making the filtering and updating actions mutually
> > > exclusive using flags hoping that two different actions taking
> > > place on the same data might cause duplication of items. But the
> > duplication
> > > is still taking place.
> > > In fact I tried using itemUpdate() also in place of setItemAt but the
> > > problem still persists.
> > > I have also tried modifying only the source array during updates
> > because the
> > > filtering takes place only on the ArrayCollection and
> > > not on the source array but this also failed."
> > >
> > > Any inputs will be appreciated.
> > >
> > > Thanks,
> > > Rohit
> > >
> >
>  
>

Reply via email to