Flex UIComponent – Création d'un objet Collection en MXML et ActionScript
Les composants Flex utilisent le modèle MVC (Model-View-Controller / Modèle-Vue-Controleur), un pattern qui différencie l'affichage de la data par rapport à la data elle-même. Cela se voit bien dans les composants de type Liste. Tous les composants de type Liste utilisent les data models. Dans le langage utilisé par ces composants, les data models sont appelés "data providers" qui sont des objets indépendants que vous pouvez associer avec le composant. Le composant utilise ensuite la donnée de cet objet pour rendre sa Vue.
Les Data Providers implémentent toujours l'interface mx.collections.ICollectionView. Bien que vous puissiez assigner un tableau ou un objet XML à la propriété dataProvider d'un composant, Flex va ensuite le convertir vers un type qui implémente ICollectionView. Cela veut dire que les Array seront convertis en un type mx.collections.ArrayCollection et les objets XML et XMLList seront convertis en mx.collections.XMLListCollection. Il est généralement mieux de pouvoir explicitement englober l'objet dans une collection avant de l'assigner à un data provider. De cette manière, vous êtes sur d'avoir une référence vers la vraie collection du data provider, plutôt que vers l'objet englobé dans cette collection.
Création d'un objet de type Collection
Il y a deux manières de créer des collections: en utilisant de l'ActionScript et en utilisant du MXML. La solution en ActionScript impose la création d'un nouveau type de collection, typiquement en passant par le constructeur.
L'exemple AS suivant crée un nouvel objet ArrayCollection qui englobe un Array:
var collection:ArrayCollection = new ArrayCollection(["a", "b", "c", "d"]);
Si vous obtenez un message d'erreur à la compilation du type: 1046: Ce type est introuvable ou n'est pas une constante de compilation : ArrayCollection ou 1180: Appel à une méthode qui ne semble pas définie, ArrayCollection, cela signifie que vous avez oublié d'importer ArrayCollection. Ajoutez simplement une instruction import mx.collections.ArrayCollection; au début de votre Script.
De manière similaire, l'exemple suivant crée une XMLListCollection qui englobe un objet XMLList:
var xmlList:XMLList = <items><item>a</item><item>b</item><item>c</item><item>d</item></items>; var collection:XMLListCollection = new XMLListCollection(xmlList);
Si vous obtenez un message d'erreur à la compilation du type: 1046: Ce type est introuvable ou n'est pas une constante de compilation : XMLListCollection ou 1180: Appel à une méthode qui ne semble pas définie, XMLListCollection , cela signifie que vous avez oublié d'importer XMLListCollection . Ajoutez simplement une instruction import mx.collections.XMLListCollection; au début de votre Script.
Vous pouvez créer les mêmes collections en utilisant du MXML. L'exemple suivant crée un objet ArrayCollection en utilisant du MXML:
<mx:ArrayCollection> <mx:Array> <mx:String>a</mx:String> <mx:String>b</mx:String> <mx:String>c</mx:String> <mx:String>d</mx:String> </mx:Array> </mx:ArrayCollection>
Et l'exemple suivant crée une XMLListCollection en utilisant du MXML:
<mx:XMLListCollection> <mx:XMLList id="exemple"> <items> <item>a</item> <item>b</item> <item>c</item> <item>d</item> </items> </mx:XMLList> </mx:XMLListCollection>
Articles similaires
- Flex UIComponent – Assigner un dataProvider à un Composant Flex en MXML et AS3
- Flex Tree – Peupler un Tree avec un dataProvider XML et Array (en MXML et ActionScript)
- Flex PopUpButton – Menu en PopUp avec une XMLListCollection et labelField
- Flex PopUpMenuButton – Exemple simple de PopUpMenuButton en MXML
- Flex Chart – Utiliser un ArrayCollection comme dataProvider (ActionScript)
Aucun trackbacks pour l'instant






16 février 2009
Flex Builder n'a pas l'air d'aimer =(
"1067: Contrainte implicite d'une valeur du type XML vers un type sans rapport XMLList."
16 février 2009
Salut,
ça me parait normal, vu qu'il n'y a même pas de tags indiquant du XML (à moins qu'ils n'apparaissent pas dans les commentaires). Sinon, si tu n'as qu'un noeud root, tu as un XML et pas une XMLList (plusieurs noeuds XML, pas de root)
Fabien
16 février 2009
Arf, le blog a mal interprêté les balises ^^;
A la base c'était un copié/collé d'une ligne plus haut (je retente sans les balises) :
"De manière similaire, l'exemple suivant crée une XMLListCollection qui englobe un objet XMLList:
var xmlList:XMLList = abcd;"
16 février 2009
Ca veut pas :/
En gros, la ligne juste en dessous de "De manière similaire, l'exemple suivant crée une XMLListCollection qui englobe un objet XMLList:" =)
16 février 2009
Désolé pour le problème de blog qui mange les tags HTML ^^
Pour ton souci, tu peux faire:
var xmlList:XMLList = XMLList("<item>a</item><item>b</item><item>c</item><item>d</item>");
16 février 2009
Merci