Créer un événement personnalisé et l’attacher à un composant (Partie 3 fin)
- Lundi 31 mai 2010
- Ecrire commentaire
Et voici venir la dernière partie de cette petite explication sur les événements personnalisés en Flex. Dans cette partie, nous allons voir comment ajouter le composant à notre application et comment utiliser les événements qui lui sont attachés.
Commençons par revenir dans le composant principal de notre projet qui pour l’instant se présente comme ceci :
1 2 3 4 5 6 | <?xml version="1.0" encoding="utf-8"?> <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx"> </s:WindowedApplication> |
Nous allons d’abord ajouter un label, il servira à garder le calcul que nous réalisons, en effet notre application permet de rentrer un chiffre et en cliquant sur plus ou moins, de ajouter/soustraire à notre valeur en cours.
1 | <s:Label text="Calcul : {calcul}" /> |
Comme vous le voyez, nous faisons appel à une variable calcul, il faut donc que nous la déclarions quelque part. Et quoi de mieux que le bloc des déclarations pour ça ?
1 2 3 | <fx:Declarations> <fx:Number id="calcul" >0</fx:Number> </fx:Declarations> |
Nous allons ajouter le composant directement à partir de la vue Source. FlexBuilder permet de le faire rapidement, juste en tapant le début du nom de notre composant et en se servant de l’auto-complétion. Si vous n’utilisez pas FlexBuilder, il suffit de rajouter le namespace de notre composant xmlns:renderers="info.fxbt.devblog.renderers.*" et de rajouter le composant <renderers:ButtonsCompo id="bc" />
On s’aperçoit ensuite que ce composant a deux événements qui nous sont connus plusClick et minusClick on va leur attribuer un event Handler (notez qu’il est possible d’attribuer un event Handler différent à chaque événement, ce que propose par défaut FlexBuilder par exemple, mais ici, les événements ont été fait de tel façon qu’on peut traiter les deux dans le même event Handler).
On se retrouve avec notre composant qui est défini de la façon suivante :
1 2 3 4 | <renderers:ButtonsCompo id="bc" plusClick="bc_plusminusClickHandler(event)" minusClick="bc_plusminusClickHandler(event)" /> |
Il faut donc maintenant définir la fonction bc_plusminusClickHandler. Cette fonction va, en fonction du type de l’événement qu’elle prend en paramètre, ajouter ou soustraire le chiffre contenu dans la zone de texte à notre total.
1 2 3 4 5 6 7 | protected function bc_plusminusClickHandler(event:TestEvent):void { if( event.type == TestEvent.PLUS_CLICKED ) calcul += event.value; else calcul -= event.value; } |
Et voici, notre programme est capable de calculer des additions et des soustractions (comment ça il ne va pas servir à grand chose ? :-p )
Vous avez remarqué qu’il y a des erreurs possibles, en effet, on peut mettre des lettres dans la zone de texte et tenter de les additionner à notre total… Ce qui ne manquera pas de lever une erreur.
Voici le code total de notre application :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | <?xml version="1.0" encoding="utf-8"?> <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:renderers="info.fxbt.devblog.renderers.*" > <fx:Script> <![CDATA[ import info.fxbt.devblog.events.TestEvent; protected function bc_plusminusClickHandler(event:TestEvent):void { if( event.type == TestEvent.PLUS_CLICKED ) calcul += event.value; else calcul -= event.value; } ]]> </fx:Script> <fx:Declarations> <fx:Number id="calcul" >0</fx:Number> </fx:Declarations> <s:layout> <s:VerticalLayout/> </s:layout> <s:Label text="Calcul : {calcul}" /> <renderers:ButtonsCompo id="bc" plusClick="bc_plusminusClickHandler(event)" minusClick="bc_plusminusClickHandler(event)" /> </s:WindowedApplication> |
Et si on veut utiliser plusieurs fois notre composant ? Et bien ce n’est pas plus compliqué qu’avec un bouton ou tout autre composant classique.
Voici rapidement le code à rajouter.
Pour la partie définition du composant :
1 2 3 4 | <renderers:ButtonsCompo id="bc10" plusClick="bc10_plusminusClickHandler(event)" minusClick="bc10_plusminusClickHandler(event)" /> |
Pour la partie définition de l’event Handler :
1 2 3 4 5 6 7 | protected function bc10_plusminusClickHandler(event:TestEvent):void { if( event.type == TestEvent.PLUS_CLICKED ) calcul += 10 * event.value; else calcul -= 10 * event.value; } |
Et ainsi, notre application est capable de soustraire/additionner les facteurs de 10 (de plus en plus fort :-p)