bindings fire at init, then sometimes at component creation time, then again when changed. Folks often see three or more. Paging schemes typically replace entire items so you get one REPLACE event per item.
________________________________ From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On Behalf Of t0ml33 Sent: Wednesday, November 28, 2007 6:41 AM To: flexcoders@yahoogroups.com Subject: [flexcoders] Re: ListCollectionView dispatches too many CollectionEvents after enableAutoUpdate It's a web-services based search application. I'm basically lazy- loading search results into a collection in chunks of 20 or so. The chunks may be non-sequential, so I pad the ArrayCollection with empty items that are replaced as they become available. >From what you're saying, disableAutoUpdate was actually intended to work in the other direction - when updating the server with data changes from the collection? As a followup question, I've noticed that bindings in general tend to fire more often than I'd expect. In some cases, 4 times for one update. Can you offer some general ideas on what might cause bindings to fire multiple times for a single update? --- In flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com> , "Alex Harui" <[EMAIL PROTECTED]> wrote: > > 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: flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com> [mailto:flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com> ] On > Behalf Of t0ml33 > Sent: Tuesday, November 27, 2007 1:04 PM > To: flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com> > 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 flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com> <mailto:flexcoders% 40yahoogroups.com> > , "Alex Harui" <aharui@> 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: flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com> <mailto:flexcoders% 40yahoogroups.com> > > [mailto:flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com> <mailto:flexcoders% 40yahoogroups.com> > ] On > > Behalf Of t0ml33 > > Sent: Wednesday, November 21, 2007 11:58 AM > > To: flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com> <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); > > } > > } > > } > > >