When the collection is synced to the server, as you edit fields in an item, you don't want to push it for every field, just once when done with the item. Clearly if you only change a small % of the items you should not reset the whole thing. What are you binding to that gets all the traffic?
________________________________ From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of t0ml33 Sent: Tuesday, November 27, 2007 1:04 PM To: [email protected] Subject: [flexcoders] Re: ListCollectionView dispatches too many CollectionEvents after enableAutoUpdate Thanks for the response, Alex. I understand that for most use cases, it would suffice to set a new source. However, I believe that approach somewhat defeats the purpose of databinding. Suppose you're bind to an ArrayCollection with 1000 items and you need to change 20? Should you clone the ArrayCollection, change the 20 items, and then rebind? Should you update the existing ArrayCollection and have the rest take care of itself? I prefer the latter - it's much cleaner. However, I also don't want my bindings firing 20 times in a row. Was there a particular use-case in mind when it was decided that only update events would be queued? It would help me better understand enable/disableAutoUpdate to know. --- In [email protected] <mailto:flexcoders%40yahoogroups.com> , "Alex Harui" <[EMAIL PROTECTED]> wrote: > > I suppose we should have called it "queueUpUpdatesUntilLater" and > "sendAllQueuedUpUpdatees". > > > > IMHO, there's an upper limit where, instead of changing piecemeal, you > should just set a new source, which should just send one big RESET > event. > > > > ________________________________ > > From: [email protected] <mailto:flexcoders%40yahoogroups.com> [mailto:[email protected] <mailto:flexcoders%40yahoogroups.com> ] On > Behalf Of t0ml33 > Sent: Wednesday, November 21, 2007 11:58 AM > To: [email protected] <mailto:flexcoders%40yahoogroups.com> > Subject: [flexcoders] ListCollectionView dispatches too many > CollectionEvents after enableAutoUpdate > > > > I am making some updates to an ArrayCollection. Since it's the > dataSource for a DataGrid, and I want the binding to update as few > times as possible, I am using ArrayCollection.disableAutoUpdate(), > making the changes, and then calling enableAutoUpdate() thinking that > this will cause the binding to refresh only once for all the > changes. This would be the case if the ArrayCollection were > dispatching events of kind CollectionEventKind.UPDATE. Alas, since I > am replacing the items in the ArrayCollection and not merely updating > them, it is CollectionEventKind.REPLACE. As you can see from > handlePendingUpdates() in ListCollectionView, it only gangs the > updates into a single refresh if the event.kind == > CollectionEventKind.UPDATE. All other CollectionEvents are fired > sequentially, which would seem to defeat the purpose of > disableAutoUpdate. Could someone clue me in on why this should be > the case? I'm tempted to monkey-patch around it, and submit a bug. > See the code below. > > Thanks, > > -tom > > private function handlePendingUpdates():void > { > if (pendingUpdates) > { > var pu:Array = pendingUpdates; > pendingUpdates = null; > > // Could further optimize to consolidate various events > // and make a decision if there are too many updates > // and we should just refresh. > var singleUpdateEvent:CollectionEvent; > for (var i:int = 0; i < pu.length; i++) > { > var event:CollectionEvent = pu[i]; > > // ****** Here's the offending code > if (event.kind == CollectionEventKind.UPDATE) > { > if (!singleUpdateEvent) > { > singleUpdateEvent = event; > } > else > { > for (var j:int = 0; j < event.items.length; > j++) > { > singleUpdateEvent.items.push(event.items > [j]); > } > } > } > else > { > listChangeHandler(event); > } > } > > if (singleUpdateEvent) > { > listChangeHandler(singleUpdateEvent); > } > } > } >

