Re: [flexcoders] custom itemrender flicker

2009-10-06 Thread Baz

 You might be better off suppressing the setItemAt if it is the same.


That is exactly what I did and it works great. Now the only issue I need to
solve is how the entire collection reloads if only one item is changed. Do
you have any advice on where I should begin looking for that? I am very
comfortable extending and overriding anything.

Thanks alot!



On Mon, Oct 5, 2009 at 10:36 PM, Alex Harui aha...@adobe.com wrote:



  It depends on how you coded the renderer.  Our list classes have very
 general and somewhat inefficient update strategies because we want to make
 sure most collection updates renderer correctly.  I haven’t looked at how
 Spark List thinks, but mx:List will refresh all renderers even if only one
 item changes because it doesn’t know if another renderer might have
 “look-ahead” and also care about the item even though its data item is some
 other item in the collection.



 You might be better off suppressing the setItemAt if it is the same.



 Alex Harui

 Flex SDK Developer

 Adobe Systems Inc. http://www.adobe.com/

 Blog: http://blogs.adobe.com/aharui



 *From:* flexcoders@yahoogroups.com [mailto:flexcod...@yahoogroups.com] *On
 Behalf Of *Baz
 *Sent:* Monday, October 05, 2009 3:18 PM
 *To:* flexcoders@yahoogroups.com
 *Subject:* Re: [flexcoders] custom itemrender flicker





 Hey Alex, thanks a lot for your reply. So it is *proper* behaviour that if
 you setItemAt in a custom itemrenderer that the whole control is rebuilt
 visually? Incidentally I am using Flex 4, so this might be of even more
 interest.

 I have a SkinnableDataContainer with an ArrayCollection dataprovider that
 holds custom objects ('reports' in this case).

 If my current collection has:

1. Report #1 = Name: 1stReportName, Path: 1stReportPath
2. Report #2 = Name: 2ndReportName, Path: 2ndReportPath

 And then I do a myArrayCollection.setItemAt(Report1, 0), which basically
 sets the first item to the same report it currently has. The itemrenderer
 empties of all items, then re-displays them, causing a flicker or flash that
 is noticeable on a slow computer.

 Wouldn't it make more sense for the itemrender NOT to re-build itself from
 scratch on every change? What if you had 100 items and u onl;y set one item?

 Thanks a lot!

 Baz




  On Mon, Oct 5, 2009 at 3:05 PM, Alex Harui aha...@adobe.com wrote:



 It depends on how you wrote the renderer.  You can try overriding the
 “function set data()” to check for changes to the object referenced by the
 renderer, but then if some sub-property changes, the renderer will not
 update.



 Might be better to understand why it flickers when updating.



 Alex Harui

 Flex SDK Developer

 Adobe Systems Inc. http://www.adobe.com/

 Blog: http://blogs.adobe.com/aharui



 *From:* flexcoders@yahoogroups.com [mailto:flexcod...@yahoogroups.com] *On
 Behalf Of *Baz
 *Sent:* Monday, October 05, 2009 12:32 PM
 *To:* flexcoders@yahoogroups.com
 *Subject:* [flexcoders] custom itemrender flicker





 If I have a custom item render based on an ArrayCollection with 10 times,
 and just for fun, I loop through those 10 items and setItemAt the exact same
 values that are already there - on screen the list of items reloads in a
 sense, re-building itself to the exact same values. I would like that in
 such a case, the on-screen controls know that they are the same as before
 and not to rebuild themselves. Is this possible? Can I intercept some event
 to double check whether they are the same or different?

 The goal of course, is to have this behaviour even if one some items
 changed. For example if I change only the 10th item, I would expect only the
 10th item to refresh, no the whole collection.

 Thanks for any ideas!

 P.S. I am not useing refresh() on the ArrayCollection is it set to
 auto-update. Also, all my setItemAt calls are done in commitProperties()



   



RE: [flexcoders] custom itemrender flicker

2009-10-06 Thread Alex Harui
I'm not sure what you mean by entire collection reloads.  What 
collectionChange events are being dispatched (what is the .kind property on the 
event).   I don' t see anything drastic in the code for REPLACE, but REFRESH or 
RESET might be a problem.  However those shouldn't be dispatched on setItemAt

Alex Harui
Flex SDK Developer
Adobe Systems Inc.http://www.adobe.com/
Blog: http://blogs.adobe.com/aharui

From: flexcoders@yahoogroups.com [mailto:flexcod...@yahoogroups.com] On Behalf 
Of Baz
Sent: Tuesday, October 06, 2009 11:26 AM
To: flexcoders@yahoogroups.com
Subject: Re: [flexcoders] custom itemrender flicker


You might be better off suppressing the setItemAt if it is the same.

That is exactly what I did and it works great. Now the only issue I need to 
solve is how the entire collection reloads if only one item is changed. Do you 
have any advice on where I should begin looking for that? I am very comfortable 
extending and overriding anything.

Thanks alot!


On Mon, Oct 5, 2009 at 10:36 PM, Alex Harui 
aha...@adobe.commailto:aha...@adobe.com wrote:


It depends on how you coded the renderer.  Our list classes have very general 
and somewhat inefficient update strategies because we want to make sure most 
collection updates renderer correctly.  I haven't looked at how Spark List 
thinks, but mx:List will refresh all renderers even if only one item changes 
because it doesn't know if another renderer might have look-ahead and also 
care about the item even though its data item is some other item in the 
collection.



You might be better off suppressing the setItemAt if it is the same.



Alex Harui

Flex SDK Developer

Adobe Systems Inc.http://www.adobe.com/

Blog: http://blogs.adobe.com/aharui



From: flexcoders@yahoogroups.commailto:flexcoders@yahoogroups.com 
[mailto:flexcoders@yahoogroups.commailto:flexcoders@yahoogroups.com] On 
Behalf Of Baz
Sent: Monday, October 05, 2009 3:18 PM
To: flexcoders@yahoogroups.commailto:flexcoders@yahoogroups.com
Subject: Re: [flexcoders] custom itemrender flicker





Hey Alex, thanks a lot for your reply. So it is *proper* behaviour that if you 
setItemAt in a custom itemrenderer that the whole control is rebuilt visually? 
Incidentally I am using Flex 4, so this might be of even more interest.

I have a SkinnableDataContainer with an ArrayCollection dataprovider that holds 
custom objects ('reports' in this case).

If my current collection has:

 1.  Report #1 = Name: 1stReportName, Path: 1stReportPath
 2.  Report #2 = Name: 2ndReportName, Path: 2ndReportPath

And then I do a myArrayCollection.setItemAt(Report1, 0), which basically sets 
the first item to the same report it currently has. The itemrenderer empties of 
all items, then re-displays them, causing a flicker or flash that is noticeable 
on a slow computer.

Wouldn't it make more sense for the itemrender NOT to re-build itself from 
scratch on every change? What if you had 100 items and u onl;y set one item?

Thanks a lot!

Baz




On Mon, Oct 5, 2009 at 3:05 PM, Alex Harui 
aha...@adobe.commailto:aha...@adobe.com wrote:



It depends on how you wrote the renderer.  You can try overriding the function 
set data() to check for changes to the object referenced by the renderer, but 
then if some sub-property changes, the renderer will not update.



Might be better to understand why it flickers when updating.



Alex Harui

Flex SDK Developer

Adobe Systems Inc.http://www.adobe.com/

Blog: http://blogs.adobe.com/aharui



From: flexcoders@yahoogroups.commailto:flexcoders@yahoogroups.com 
[mailto:flexcoders@yahoogroups.commailto:flexcoders@yahoogroups.com] On 
Behalf Of Baz
Sent: Monday, October 05, 2009 12:32 PM
To: flexcoders@yahoogroups.commailto:flexcoders@yahoogroups.com
Subject: [flexcoders] custom itemrender flicker





If I have a custom item render based on an ArrayCollection with 10 times, and 
just for fun, I loop through those 10 items and setItemAt the exact same values 
that are already there - on screen the list of items reloads in a sense, 
re-building itself to the exact same values. I would like that in such a case, 
the on-screen controls know that they are the same as before and not to rebuild 
themselves. Is this possible? Can I intercept some event to double check 
whether they are the same or different?

The goal of course, is to have this behaviour even if one some items changed. 
For example if I change only the 10th item, I would expect only the 10th item 
to refresh, no the whole collection.

Thanks for any ideas!

P.S. I am not useing refresh() on the ArrayCollection is it set to auto-update. 
Also, all my setItemAt calls are done in commitProperties()






[flexcoders] custom itemrender flicker

2009-10-05 Thread Baz
If I have a custom item render based on an ArrayCollection with 10 times,
and just for fun, I loop through those 10 items and setItemAt the exact same
values that are already there - on screen the list of items reloads in a
sense, re-building itself to the exact same values. I would like that in
such a case, the on-screen controls know that they are the same as before
and not to rebuild themselves. Is this possible? Can I intercept some event
to double check whether they are the same or different?

The goal of course, is to have this behaviour even if one some items
changed. For example if I change only the 10th item, I would expect only the
10th item to refresh, no the whole collection.

Thanks for any ideas!

P.S. I am not useing refresh() on the ArrayCollection is it set to
auto-update. Also, all my setItemAt calls are done in commitProperties()


RE: [flexcoders] custom itemrender flicker

2009-10-05 Thread Alex Harui
It depends on how you wrote the renderer.  You can try overriding the function 
set data() to check for changes to the object referenced by the renderer, but 
then if some sub-property changes, the renderer will not update.

Might be better to understand why it flickers when updating.

Alex Harui
Flex SDK Developer
Adobe Systems Inc.http://www.adobe.com/
Blog: http://blogs.adobe.com/aharui

From: flexcoders@yahoogroups.com [mailto:flexcod...@yahoogroups.com] On Behalf 
Of Baz
Sent: Monday, October 05, 2009 12:32 PM
To: flexcoders@yahoogroups.com
Subject: [flexcoders] custom itemrender flicker



If I have a custom item render based on an ArrayCollection with 10 times, and 
just for fun, I loop through those 10 items and setItemAt the exact same values 
that are already there - on screen the list of items reloads in a sense, 
re-building itself to the exact same values. I would like that in such a case, 
the on-screen controls know that they are the same as before and not to rebuild 
themselves. Is this possible? Can I intercept some event to double check 
whether they are the same or different?

The goal of course, is to have this behaviour even if one some items changed. 
For example if I change only the 10th item, I would expect only the 10th item 
to refresh, no the whole collection.

Thanks for any ideas!

P.S. I am not useing refresh() on the ArrayCollection is it set to auto-update. 
Also, all my setItemAt calls are done in commitProperties()



Re: [flexcoders] custom itemrender flicker

2009-10-05 Thread Baz
Hey Alex, thanks a lot for your reply. So it is *proper* behaviour that if
you setItemAt in a custom itemrenderer that the whole control is rebuilt
visually? Incidentally I am using Flex 4, so this might be of even more
interest.

I have a SkinnableDataContainer with an ArrayCollection dataprovider that
holds custom objects ('reports' in this case).

If my current collection has:


   1. Report #1 = Name: 1stReportName, Path: 1stReportPath
   2. Report #2 = Name: 2ndReportName, Path: 2ndReportPath

And then I do a myArrayCollection.setItemAt(Report1, 0), which basically
sets the first item to the same report it currently has. The itemrenderer
empties of all items, then re-displays them, causing a flicker or flash that
is noticeable on a slow computer.

Wouldn't it make more sense for the itemrender NOT to re-build itself from
scratch on every change? What if you had 100 items and u onl;y set one item?

Thanks a lot!

Baz





On Mon, Oct 5, 2009 at 3:05 PM, Alex Harui aha...@adobe.com wrote:



  It depends on how you wrote the renderer.  You can try overriding the
 “function set data()” to check for changes to the object referenced by the
 renderer, but then if some sub-property changes, the renderer will not
 update.



 Might be better to understand why it flickers when updating.



 Alex Harui

 Flex SDK Developer

 Adobe Systems Inc. http://www.adobe.com/

 Blog: http://blogs.adobe.com/aharui



 *From:* flexcoders@yahoogroups.com [mailto:flexcod...@yahoogroups.com] *On
 Behalf Of *Baz
 *Sent:* Monday, October 05, 2009 12:32 PM
 *To:* flexcoders@yahoogroups.com
 *Subject:* [flexcoders] custom itemrender flicker





 If I have a custom item render based on an ArrayCollection with 10 times,
 and just for fun, I loop through those 10 items and setItemAt the exact same
 values that are already there - on screen the list of items reloads in a
 sense, re-building itself to the exact same values. I would like that in
 such a case, the on-screen controls know that they are the same as before
 and not to rebuild themselves. Is this possible? Can I intercept some event
 to double check whether they are the same or different?

 The goal of course, is to have this behaviour even if one some items
 changed. For example if I change only the 10th item, I would expect only the
 10th item to refresh, no the whole collection.

 Thanks for any ideas!

 P.S. I am not useing refresh() on the ArrayCollection is it set to
 auto-update. Also, all my setItemAt calls are done in commitProperties()

   



RE: [flexcoders] custom itemrender flicker

2009-10-05 Thread Alex Harui
It depends on how you coded the renderer.  Our list classes have very general 
and somewhat inefficient update strategies because we want to make sure most 
collection updates renderer correctly.  I haven't looked at how Spark List 
thinks, but mx:List will refresh all renderers even if only one item changes 
because it doesn't know if another renderer might have look-ahead and also 
care about the item even though its data item is some other item in the 
collection.

You might be better off suppressing the setItemAt if it is the same.

Alex Harui
Flex SDK Developer
Adobe Systems Inc.http://www.adobe.com/
Blog: http://blogs.adobe.com/aharui

From: flexcoders@yahoogroups.com [mailto:flexcod...@yahoogroups.com] On Behalf 
Of Baz
Sent: Monday, October 05, 2009 3:18 PM
To: flexcoders@yahoogroups.com
Subject: Re: [flexcoders] custom itemrender flicker



Hey Alex, thanks a lot for your reply. So it is *proper* behaviour that if you 
setItemAt in a custom itemrenderer that the whole control is rebuilt visually? 
Incidentally I am using Flex 4, so this might be of even more interest.

I have a SkinnableDataContainer with an ArrayCollection dataprovider that holds 
custom objects ('reports' in this case).

If my current collection has:

 1.  Report #1 = Name: 1stReportName, Path: 1stReportPath
 2.  Report #2 = Name: 2ndReportName, Path: 2ndReportPath
And then I do a myArrayCollection.setItemAt(Report1, 0), which basically sets 
the first item to the same report it currently has. The itemrenderer empties of 
all items, then re-displays them, causing a flicker or flash that is noticeable 
on a slow computer.

Wouldn't it make more sense for the itemrender NOT to re-build itself from 
scratch on every change? What if you had 100 items and u onl;y set one item?

Thanks a lot!

Baz




On Mon, Oct 5, 2009 at 3:05 PM, Alex Harui 
aha...@adobe.commailto:aha...@adobe.com wrote:


It depends on how you wrote the renderer.  You can try overriding the function 
set data() to check for changes to the object referenced by the renderer, but 
then if some sub-property changes, the renderer will not update.



Might be better to understand why it flickers when updating.



Alex Harui

Flex SDK Developer

Adobe Systems Inc.http://www.adobe.com/

Blog: http://blogs.adobe.com/aharui



From: flexcoders@yahoogroups.commailto:flexcoders@yahoogroups.com 
[mailto:flexcoders@yahoogroups.commailto:flexcoders@yahoogroups.com] On 
Behalf Of Baz
Sent: Monday, October 05, 2009 12:32 PM
To: flexcoders@yahoogroups.commailto:flexcoders@yahoogroups.com
Subject: [flexcoders] custom itemrender flicker





If I have a custom item render based on an ArrayCollection with 10 times, and 
just for fun, I loop through those 10 items and setItemAt the exact same values 
that are already there - on screen the list of items reloads in a sense, 
re-building itself to the exact same values. I would like that in such a case, 
the on-screen controls know that they are the same as before and not to rebuild 
themselves. Is this possible? Can I intercept some event to double check 
whether they are the same or different?

The goal of course, is to have this behaviour even if one some items changed. 
For example if I change only the 10th item, I would expect only the 10th item 
to refresh, no the whole collection.

Thanks for any ideas!

P.S. I am not useing refresh() on the ArrayCollection is it set to auto-update. 
Also, all my setItemAt calls are done in commitProperties()