DataFilterLib – Utilisation de filtres personnalisés
Dans les tutoriaux Flex DataFilterLib précédents, on a vu comment utiliser les filtres de la librairies, qu'ils soient simples ou combinés. La DataFilterLib fournit des filtres de base mais elle vous permet aussi d'ajouter des filtres personnalisés. Pour cela, il faut simplement créer une classe qui hérite (extends) de DataFilterBase comme ceci:
public class CustomSimpleFilter extends DataFilterBase {
public function CustomSimpleFilter(parameters:DataFilterParameters = null) {
super(parameters);
}
}
Les filtres de la librairie sont codés de cette manière, vous pouvez jeter un oeil aux sources de la librairie Flex. Grâce à l'objet "parameters" de type DataFilterParameters, vous pourrez récupérer l'ensemble des paramètres passés dans le tag MXML (filterOperator, filterValues, filterKeys, …). Par exemple, pour récupérer les filterValues, il vous suffit d'appeler:
var values:Array = _parameters.filterValues;
Si vous voulez faire votre filtrage spécial, il faut surcharger la méthode apply(item:Object):Boolean comme ceci:
override public function apply(item:Object):Boolean {
// code
return true;
}
Dans l'exemple suivant, on remplit un ArrayCollection avec des objets custom, de type CustomSimpleObject. Au moment où l'objet passe dans la méthode apply, on peut donc faire un cast (conversion de type) du paramètre item. Voici donc la classe complète qui a servi pour l'exemple qui vient après:
DataFilterLib – Utilisation de multiple filtres sur une même collection
Dans les exemples sur la DataFilterLib précédent, on a vu comment faire des filtrages simple, que ce soit par valeur ou par intervalle. Ces fonctionnalités étaient "assez" facilement reproduisibles avec des filterFunctions mais on va maintenant voir une des principales fonctionnalités de la DataFilterLib, le filtrage de données selon plusieurs filtres.
Le filtrage avec plusieurs DataFilterParameters est très simple puisqu'il suffit d'ajouter des DataFilterParameters au DataFilterSet principal. Les filtres seront ainsi combinés entre eux. N'importe quelle combinaison de filtres est possible, y compris un mélange de filtres type SingleValue et d'Interval.
Voici par exemple le DataFilterSet utilisé dans l'exemple suivant:
<filter:DataFilterSet id="filterSet"
data="{productData}">
<filter:dataFilterParameters>
<filter:DataFilterParameters id="tstIntervalParameters"
filterType="{DataFilterType.INTERVAL}"
filterKeys="{'productPrice'}"
filterOperator="{DataFilterIntervalOperator.INTERVAL_CLOSED}"
filterValues="{hsProductPrice.values}"
active="{activeIntervalCB.selected}"
invert="{invertIntervalCB.selected}"/>
<filter:DataFilterParameters id="tstMultiValueParameter"
filterType="{DataFilterType.SINGLE_VALUE}"
filterKeys="productType"
filterOperator="{DataFilterSingleValueOperator.EQUALS_TO}"
filterValues="{singleValuesList.selectedItems}"
invert="{invertListCB.selected}"
active="{activeListCB.selected}"/>
<filter:DataFilterParameters id="tstSingleValueParameter"
filterType="{DataFilterType.SINGLE_VALUE}"
filterKeys="{textFieldCB.selectedItem}"
filterOperator="{textOperatorCB.selectedItem}"
filterValues="{stringFilter.text}"
active="{activeTextCB.selected}"
invert="{invertTextCB.selected}"/>
</filter:dataFilterParameters>
</filter:DataFilterSet>
On a ici 3 filtres, 2 de type Singlevalue et un de type Interval. Le nombre de filtre n'est pas limité au sein d'un DataFilterSet.
Démonstration en ligne (onglet "Multiple Filters")
L'exemple suivant montre comment mettre en place de multiples filtres sur un même ArrayCollection. On peut ainsi facilement trouver les produits de type Home et Electro entre 80 et 250 euros. Toutes les combinaisons sont possibles. Pour intégrer ce genre de filtres dans votre application Flex, il vous suffit de lier les filtres aux bon champs de votre donnée et le tour est joué
Flex PopUp – Créer une PopUp à partir d'un composant MXML ou ActionScript
Dans les précédents exemples sur les PopUp Flex, vous avez pu voir des cas d'utilisation simplistes, juste pour montrer le fonctionnement de la méthode createPopUp(). Mais la plupart du temps, vous voudrez utiliser des composants personnalisés, c'est-à-dire des composants que vous aurez codé en MXML ou en ActionScript (puisque si vous avez suivi, cela revient à peu près à la même chose).
Pour l'exemple, voici un composant MXML qui est une sous-classe de TitleWindow avec une TextArea et un handler pour fermer la fenêtre PopUp. Ici, je vais donc créer un nouveau composant MXML appelé TextAreaWindow.mxml dans mon répertoire de projet qui va contenir:
<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" showCloseButton="true" close="closeHandler(event)">
<mx:Script>
<![CDATA[
import mx.events.CloseEvent;
import mx.managers.PopUpManager;
private function closeHandler(event:CloseEvent):void{
PopUpManager.removePopUp(this);
}
]]>
</mx:Script>
<mx:TextArea height="200" width="200" text="Texte dans une TextArea qui va être ajouté à une PopUp bla bla"/>
</mx:TitleWindow>





