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