Flex States: Création d'états en ActionScript
Dans la plupart des cas, il est plus approprié d'utiliser du MXML plutôt que de l'ActionScript pour définir des états. Seulement parfois, vous voulez définir des états dynamiquement, dans ce cas-là, vous devez utiliser ActionScript. Par exemple, si vous voulez créer un formulaire multi-page basé sur des données chargées à l'execution (runtime). Créer ce formulaire dynamiquement est avantageux car vous pouvez changer le formulaire sans avoir à recompiler et republier le SWF. Cependant, comme les éléments du formulaires ne sont pas connus à la compilation, vous ne pouvez pas utiliser le MXML pour les définir.
Création de States en ActionScript
Quand vous créez des états en utilisant ActionScript, vous utilisez la classe mx.states.State. Vous pouvez utiliser le constructeur directement pour définir une nouvelle instance d'un State.
var stateA:State = new State();
Vous pouvez assigner un nom à l'état en utilisant la propriété "name", comme si vous utilisiez l'attribut name du tag <mx:State>:
stateA.name = "exampleStateA";
Tout comme vous utilisez l'attribut "basedOn" du taf <mx:State> pour définir l'héritage de l'état, vous pouvez utiliser la propriété "basedOn" de la classe State. La portion de code suivante définit un nouvel état basé sur l'état construit dans les deux lignes de code précédentes. Notez que la propriété "basedOn" attend une chaine (String) spécifiant le "name" de l'état sur lequel vous voulez baser le nouvel état; vous ne pouvez pas l'assigner à une référence de l'objet State.
var stateB:State = new State(); stateB.name = "exampleStateB"; stateB.basedOn = "exampleStateA";
Ajout de States en Action Script
Dans le MXML, vous utilisez le tag <mx:states> pour définir un tableau d'états pour une application ou un composant. En ActionScript, vous allez utiliser la propriété "states". La propriété "states" est définie dans UIComponent et est héritée par toutes les applications / composants. Le type de states est un Array, mais par défaut, cette propriété à une valeur null. Si vous voulez ajouter des états à une application ou à un composant en utilisant seulement de l'ActionScript, vous devez d'abord instancier un tableau:
states = new Array();
Une fois défini, ajoutez les états à votre tableau:
states.push(stateA); states.push(stateB);
Ajout de modifications d'état en ActionScript (overrides)
Tout comme vous pouvez définir des modifications d'état (AddChild, SetProperty …) dans le MXML, vous pouvez les définir en ActionScript. Cependant, en plus du fait de définir des "overrides" (modification d'état), vous devez les ajouter à l'état. En utilisant le MXML, vous insérez simplement le tag de modification d'état dans le tag <mx:State>. En ActionScript, vous devez utiliser la propriété "overrides" de la classe State.
La propriété "overrides" est défini comme un Array (tableau). Cependant, par défaut, la propriété "overrides" d'un objet State a la valeur undefined. C'est pourquoi vous devez d'abord définir la propriété "overrides" comme un tableau à un état en ActionScript:
stateA.overrides = new Array();
Une fois que vous avez défini la propriété "overrides" comme un tableau, vous pouvez ajouter les overrides (modifications d'état) au tableau:
stateA.overrides.push(exampleAddChild);
Articles similaires
- Flex States: Définir des états basés sur des états existants
- Flex States: Création et application d'états simples
- Flex 4 – Différences entre Flex 3 et Flex 4 (4-Nouvelle syntaxe des States)
- Flex Transition: Créer des Transitions en MXML (Move, Resize…), avec exemple
- Flex Transition: Programmer des Transitions en ActionScript (Move, Resize…), avec exemple AS3
Aucun trackbacks pour l'instant






11 décembre 2011
Bonjour,
J'ai bien compris comment créer un état, mais la question que je me pose c'est comment l'affecter à un composant Flex créer en as3
En Flex il y a la propriété includeIn (par exemple sur un composant FormItem) mais il est impossible de l'atteindre lorsque FormItem est générer en AS3
Pouvez en dire plus a ce sujet, s'il vous plait ?
Bien cordialement.