Tom,

Sure. It is confusing. I think the concept of the AC being "updated" and
"refreshed" is the problem. I'd like to help you understand, because it will
prevent future frustration!

Your quote:
"I assumed (obviously incorrectly) that if the source of the AC was updated,
and the contents of the AC refreshed (as was happening), the AC would
dispatch some event that would alert bound objects (in this case, the
Repeater) of the change."

Specifically:
"contents of the AC refreshed (as was happening)"
The contents of the AC *is* the Array. So, when you change the Array, you
are immediately changing the contents of the AC. There is no delay, no
refresh, no update. It immediately changes and the AC immediately reflects
those changes. If you do array.push("mydata") then ac.length it WILL be
longer. And something like ac.getItemAt(ac.length-1) will immediately return
"mydata".

Therefore, if you inspect the AC's source in the debugger it will always be
up-to-date. The AC doesn't make a copy and it never has stale data.

However, the AC itself does not "know" that its data has changed. If you
call ac.addItem("mydate") then the AC "knows" that its data has changed.
Only when the AC knows its data has changed does it dispatch any events.
When you change the contents of the Array that the AC uses as source, it has
no idea you've made any changes. Thus, any components using the AC are also
not alerted to any changes.

So, if a different event were to cause the component to loop through the AC
again, it would see the new data. The trick is finding an event that does
this reliably and repeatably. The easiest solution is to use the AC directly
to change the data. Manipulating the AC will always update components that
listen to events on the AC.


On Thu, Jun 26, 2008 at 1:43 PM, Tom McNeer <[EMAIL PROTECTED]> wrote:

>   First, Amy, thanks for your suggestion. I had already done this,
> although it wasn't clear from my note.
>
> Jonathan,
>
> Thanks for your explanation, and for the solution. Calling refresh()
> correctly alerts the Repeater.
>
> What I guess I don't understand is that the ArrayCollection was always
> correctly being updated -- I could see the values in the debugger. But even
> though the Collection was updated, it wasn't informing the Repeater.
>
> I assumed (obviously incorrectly) that if the source of the AC was updated,
> and the contents of the AC refreshed (as was happening), the AC would
> dispatch some event that would alert bound objects (in this case, the
> Repeater) of the change.
>
> Clearly, I have a lot to learn about the way events propagate from various
> changes.
>
>
>
>
> --
> Thanks,
>
> Tom
>
> Tom McNeer
> MediumCool
> http://www.mediumcool.com
> 1735 Johnson Road NE
> Atlanta, GA 30306
> 404.589.0560
>  
>

Reply via email to