Hero – Le premier build de Flex 4.5 dévoilé
J'en parlais il y a quelques semaines, la prochaine version du SDK Flex (Flex 4.5) sera nommée Hero. Celle-ci comportera notamment des composants pour plate-formes mobiles bien pratiques. Pour plus d'informations, lire ce billet:
Hero – Le prochain Flex SDK (4.5) avec composants pour mobiles
Et aujourd'hui, la Product Manager de Flex, Deepa Subramaniam a annoncé sur son blog, le premier build public de ce SDK:
Exciting Developments with Hero
Ce build (4.5.0.17077) peut être téléchargé sur le site Open Source @ Adobe:
Télécharger le dernier build de Hero Flex 4.5
Ce build est le premier, il est donc incomplet et sûrement buggé. Pas de composants mobiles dans cette version (pour l'instant!), voici les fonctionnalités implémentées:
Je suis allé jeter un coup d'oeil sur les documentations (encore incomplètes elles aussi) et les composants Image et DataGrid sont vraiment cool!
Notamment la possibilité de donner une SkinPart à une image pour l'affichage du preloading de l'image. Plus besoin de faire une nouvelle classe qui va hériter de Image pour cela. Notez aussi que ce composant Image intègre directement une mise en cache des éléments chargés. Ici aussi, on aura plus besoin de SuperImage et autres.
Le composant Spark DataGrid est lui, le remplaçant de la DataGrid mais aussi, à terme, de l'AdvancedDataGrid. Lisez les specifications, les modifications apportées ont du sens
.
Pour l'instant, ils ont trouvé le set de couleurs le plus moche pour les couleurs de rollover / selection de base
:
Composant Flex – Interface de Pagination générique (exemple)
Il y a quelques semaines, je présentais sur Adobe Flex Tutorial un composant Flex nommé Paginator qui était une interface de pagination générique pour vos applications. Pour rappel, la pagination sert à présenter la donnée par bouts (pages) afin de ne pas noyer l'utilisateur. Dans un commentaire, CapoeiraDance demandait à voir un exemple d'application de ce composant. Voici donc un exemple que j'ai concocté moi-même.
Dans cet exemple, on a une donnée sur les états américains avec quelques valeurs. J'ai choisi de n'afficher que 8 éléments pas page pour montrer le fonctionnement de l'interface de pagination. La vraie pagination (au niveau de la data) se fait par une "filterFunction" sur le dataProvider (ArrayCollection). Ainsi, on va regarder l'index de l'item dans la donnée pour savoir s'il est dans la page courante. Le code n'est sûrement pas optimal mais cela donne une idée.
Attention, pour indiquer le nombre total d'éléments au paginator, on utilise bien la propriété "length" de la "source" de l'ArrayCollection et pas la "length" de l'ArrayCollection. En effet, si on utilise directement statesData.length, les résultats seront erronés car la fonction de filtre va modifier cette longueur.
J'aurai pu être chauvin et utiliser la DataFilterLib pour créer cette pagination mais gardons les choses simples pour l'instant
.
Un peu de code pour commencer
[Bindable]
private var statesData:ArrayCollection = new ArrayCollection([...]);
...
// variables utilisées par la fonction de filtre
private var _startIdx:int = 0;
private var _endIdx:int = 1000;
private function init():void{
// on donne une fonction de filtre à la donnée pour n'afficher que les résultats courants
statesData.filterFunction = paginateFilterFunction;
statesData.refresh();
}
private function pageChangeHandler(e:PaginateEvent):void{
// affichage du nombre de résultats courant
var page:int = e.index;
var startIndex:int = (page * e.itemsPerPage) + 1;
var endIndex:int = Math.min((startIndex + e.itemsPerPage -1), e.itemsTotal);
_startIdx = startIndex - 1;
_endIdx = endIndex;
txt.text = "Results: " + String(startIndex) + " - " + String(endIndex) + " of " + e.itemsTotal;
// filtrage de la donnée par page
statesData.refresh();
}
private function paginateFilterFunction(item:Object):Boolean{
var itemIdx:int = statesData.getItemIndex(item);
return (itemIdx >= _startIdx && itemIdx < _endIdx) || itemIdx == statesData.source.length;
}
...
<local:PageSelector id="paginator"
itemsPerPage="{8}"
rangeCount="6"
itemsTotal="{statesData.source.length}"
selectedIndex="0"
pageChange="pageChangeHandler(event)" />
L'application en ligne
Flex Source Code Download: Télécharger le code source complet de l'application
DataFilterLib – Filtrer plusieurs vues en utilisant le DataBinding
Voici un nouvel exemple de la DataFilterLib qui montre simplement comment on peut mettre à jour plusieurs vues avec un seul filtre. Dans cet exemple, j'ai 4 composants qui ont tous comme dataProvider, la même ArrayCollection. J'ai ainsi une DataGrid, une TileList, une List et un Chart qui affichent ma donnée (donnée d'exemples avec des appareils photo).
Pour effectuer mon filtrage, j'utilise un filtre de type INTERVAL, que vous pouvez configurer à votre guise. Cet article explique le fonctionnement des DataFilterInterval en détail. Grâce au mécanisme de Data Binding entre mes vues et mon model, toutes les vues vont se mettre à jour pendant la modification du filtrage.





