Yes me too !

Le 2023-04-26 11:40, Hugo Ferreira a écrit :

I look forward to see your bead in action.

Harbs <harbs.li...@gmail.com> escreveu no dia quarta, 26/04/2023 à(s) 10:39:

That means, that I could use a normal DataGrid and "emulated" the infinite behaviour ?
Yes.

On Apr 26, 2023, at 12:32 PM, Hugo Ferreira <hferreira...@gmail.com> wrote:
Hi Harbs,

That's fantastic !
That means, that I could use a normal DataGrid and "emulated" the infinite behaviour ? If you managed time to push the bead with a example of use, would be great (when you have time).

But, don't forget that the user can grab the scroll bar and drop somewhere.

Harbs <harbs.li...@gmail.com <mailto:harbs.li...@gmail.com>> escreveu no dia quarta, 26/04/2023 à(s) 10:26:
The way I handle performance in my app is with requestAnimationFrame.

Stash an array of your data providers and add them i.e. 20 at a time:

private function handleScrollEnd():void{
for(var i:int=0;i<20;i++){
if(pendingTags.length){
// shift the first item and add
 it

to tags
 tags.addItem(pendingTags.shift());

} else {
break;
}
}
tagsList.dataProvider = tags;
if(pendingTags.length){
requestAnimationFrame(handleScrollEnd);
}
}

This makes things very snappy.

Another thing to look out for in terms of performance: Don't create any
unnecessary SVG elements (especially) in your itemRenderers. They are
 huge

performance killers.

Somewhat related:

I recently learned about IntersectionObservers and it's greatly improved
my infinite scrolling code:

private var gridObserver:Object;
private var observedItem:DataItemRenderer;
private function observeGridItem(lastIndex:int):void{
if(!gridObserver){
gridObserver = new
window["IntersectionObserver"](handleGridItemIntersection, {
root: view.images.element,
rootMargin: "0px",
threshold: 0.1
});
}
unobserveGridItem();
var dataContainerView:DataContainerView =
prefUtils.treeLayout ? view.imageTree.view as DataContainerView :
view.imageGrid.view as DataContainerView;
observedItem =
(dataContainerView).getItemRendererAt(lastIndex) as DataItemRenderer;
if(observedItem && observedItem.element){
 gridObserver.observe(observedItem.element);

}
}
private function unobserveGridItem():void{
if(!observedItem){
return;
}
if(!gridObserver){
return;
}
gridObserver.unobserve(observedItem.element);
observedItem = null;
}
private function
handleGridItemIntersection(entries:Array):void{
if(!entries.length){
return;
}
var entry:Object = entries[0];
if(entry.isIntersecting){
unobserveGridItem();
handleScrollEnd();
}
}

In this class, handleScrollEnd makes a request for more data.

When I have time, I should really create beads for both of these
patterns...

On Apr 26, 2023, at 11:19 AM, Hugo Ferreira <hferreira...@gmail.com> wrote:
Hi,

File sent.

Thanks for trying to improve virtualdatagrid.
It is far from perfect but for those who want to use it for an application with a lot of data, for now it is the solution (or use
pagination).
Regards,
Hugo.

<cont...@cristallium.com <mailto:cont...@cristallium.com> <mailto:
 cont...@cristallium.com <mailto:cont...@cristallium.com>>> escreveu no

dia quarta, 26/04/2023 à(s) 07:37: Hi Hugo,

Thank a lot for your reply and sharing.
I don't know if it's an issue with my webmail, I don't have an attachment. Could you send it directly on my email ? (contact at
cristallium.com <http://cristallium.com/> <http://cristallium.com/ <
 http://cristallium.com/>> )

I will try with latest build from source to have some of your fix and study your DataGrid.as I will keep you in touch if I can do more improvements
Regards
Fred

Le 2023-04-25 23:51, Hugo Ferreira a écrit :

Hi,

DataGrid does not work good with a lot of data (as you saw).
You can use pagination (the users hate this approach and it's not very
mobile friendly but it's technically a simple way to solve this problem) or

you can render on the screen only what is visible (the users love this
approach, it's mobile friendly but technically it's hard). Think about a game with 1000 players on the screen that you hide what
 is not visible at a specific moment.

VirtualDataGrid have this goal however there are many chalenges to be
 usable.

I saw in action several issues, I was able to find what I fix the
 majority of them and push to Royale github (I recomend compile from the
lastest source), I was able to fix 2 other problems in a ugly way and for

that reason I have an extension of the VirtualDataGrid on my libraries
 (as

soon I find better approach, I will exchange this local patches to
 Royale).

You can find in attachment my DataGrid.as that extends from Royale
 VirtualDataGrid.as

The 2 issues are commented in English (sorry for my bad English), so
 it's easy to understand the issues and what the pach does.

I also recomend to create ItemRenderes to all your needs where you can
have 2 states: reading and editing, exchaning from a Label to a TextInput

for example.
About your issue, I kwnow it and for now it's the only major issue
 with

VirtualDataGrid that I'm aware and I was not able to find iet a stable
 fix,

however I found a more or less workaround (you can find it on my
DataGrid.as). I have created a bead DataGridScrollSpeed that I'm using on my
 DataGrid.as

This slow a bit the scroll and the issue reduces for almost of the
 time

unless you force several times. You can decrease even more the speed and reduce 99% the issue.
It's not the correct fix but I was not able to find out a better
 approach.

If someone can fix this for good, great !

Regards,
Hugo.

<cont...@cristallium.com <mailto:cont...@cristallium.com> <mailto:
 cont...@cristallium.com <mailto:cont...@cristallium.com>>> escreveu no

dia terça, 25/04/2023 à(s) 18:46: Hi All,

I'm on a dev using Apache Royale with Jewel DataGrid tryng to show
 about

500 rows.

But I have an issue when I set dataprovider : the application is
 hanging

about 20 seconds... Then I saw that there is a VirtualDataGrid.

Using it is very fast. But there is an issue with vertical scrollbar :
when using it from bottom to upper, it's working right, but from upper
to bottom the thumb goes away (on Chrome). The issue is visible on
 Tour

de Jewel :

https://royale.apache.org/tourdejewel/#!virtual_lists_panel <
 https://royale.apache.org/tourdejewel/#!virtual_lists_panel> <

https://royale.apache.org/tourdejewel/#!virtual_lists_panel <
 https://royale.apache.org/tourdejewel/#!virtual_lists_panel>>

(it's working is scrolling slow, but if I move down a little fast,
 then

the thumb go away from mouse and go immediatly to the end at bottom of
list)

On Firefox : there is one scrollbar but when can't reach the end of
 list

and on chrome there are 2 scrollbars, we can reach end of list but
 there

is an issue on using scrollbar from top to bottom

I saw a fix by Hugo, so I wanted to download last build on :
http://apacheroyaleci2.westus2.cloudapp.azure.com:8080/job/royale-asjs_jsonly/lastSuccessfulBuild/artifact/out/
<
http://apacheroyaleci2.westus2.cloudapp.azure.com:8080/job/royale-asjs_jsonly/lastSuccessfulBuild/artifact/out/

<
http://apacheroyaleci2.westus2.cloudapp.azure.com:8080/job/royale-asjs_jsonly/lastSuccessfulBuild/artifact/out/
<
http://apacheroyaleci2.westus2.cloudapp.azure.com:8080/job/royale-asjs_jsonly/lastSuccessfulBuild/artifact/out/

Unfortunaly it's dead. Is there a way to download last build on other
link ?

Regards

nb : I'm using sdk 0.9.10
--
Frédéric Gilli
mob.0668542622
http://www.cristallium.com <http://www.cristallium.com/> <
 http://www.cristallium.com/ <http://www.cristallium.com/>>

<http://www.cristallium.com/ <http://www.cristallium.com/>>

--
Frédéric Gilli

mob.0668542622

http://www.cristallium.com

 [1]



Links:
------
[1] http://www.cristallium.com

Reply via email to