Archives pour la catégorie “Flex”


…parce que ça ne marche pas comme je m’y attends. Et donc ça me fait écrire des bugs!

Dans tous les autres languages que je connais (C, C++, C#, Java, Eiffel, …), la notion de scope est très stricte. Je m’attend donc à ce que la fonction suivant ne compile pas:

function test(a: Boolean): void {
if (a == true) {
var i: int = 10;
trace(i);
}
trace(i); // cette ligne ne devrait pas compiler!
}

Or ActionScript a une notion de scope un peu laxiste: dès qu’une variable est déclarée à l’intérieur d’une fonction - peu importe où - alors elle est accessible à l’intérieur, y compris avant sa déclaration! Regardez par exemple la fonction suivante:

public function test2(a: Boolean): void {
i = 5;
trace(i);
if (a == true) {
var i: int = 10;
trace(i);
}
}

La fonction compile et l’execution de test2(false) affiche “5″.
C’est fou non?

Alors quand on complique un peu les choses, forcement les bugs sortent du bois.

Quizz numéro 1: qu’affiche la fonction test3() lors de son execution?

public function test3(): void {
var functions: Array = new Array();
for (var i: int = 0; i < 5; i++) {
functions.push(function(): void {
trace(i);
});
}

for each (var fct: Function in functions) {
fct();
}
}

Oui, là devant, bien répondu!

5
5
5
5
5

Quand je vous dis que je hais les variables locales ActionScript!

Quizz numéro 2:Comment implementer la fonction 3 pour que les fonctions anonymes affichent leur index respectif?

Comments Pas de commentaire »

Ce week-end j’ai mis à jour mon composant Flex pour voir les autres composants et je l’ai renommé en FlexSpy au passage. Au menu de cette nouvelle version, la possibilité de voir les styles d’un composant (backgroundColor, cornerRadius, etc.), une nouvelle organisation de la fenètre, et une nouvelle API.

Désormais il suffit d’utiliser l’une des deux méthodes show(…) ou registerKey(…) de la classe com.flexspy.FlexSpy (voir post précédent).

Je vous laisse découvrir la nouvelle version “en live” sur l’application Dashboard de Adobe [version originale]

Flex Spy

Flex Spy démo (right-click pour voir les sources)

Télécharger FlexSpy.zip

Mais je ne vais pas m’arrêter là et je compte faire évoluer ce composant dans les semaines à venir. Quelles fonctionnalités aimeriez-vous que j’ajoute à FlexSpy ?

Comments 2 commentaires »

Si vous vous demandez parfois pourquoi ce satané composant ne prend pas toute la largeur qui lui est allouée alors que vous lui avez expressement demandé, alors ce qui suit est fait pour vous!

Ce composant vous permet d’espionner en temps réel tous les composant d’une application Flex. Voici par exemple, ce que cela donne sur l’application FlexStore de Adobe.

ComponentTree component (small)

Télécharger ComponentTree.zip

Ce composant est complètement libre de droit, il est livré sous licence WTFPL. Pour l’inclure dans votre application, téléchargez le, puis importez le dans Flex Builder (File > Import puis General > “Existing Projects into Workspace”) et linkez le à votre projet.

Ensuite, vous pouvez soit ajouter un bouton pour afficher la pop-up comme suit:

<mx:Application ...>
...
<mx:Script>
  <![CDATA[
    import com.coderpeon.comptree.ComponentTreeWnd;
  ]]>
</mx:Script>
<mx:Button label="Button" click="ComponentTreeWnd.show()" />
...
</mx:Application>

ou bien, enregistrez un raccourci clavier pour ouvrir l’espion de composants (dans le creationComplete de votre application par exemple):

<mx:Application creationComplete="onCreationComplete()"...>
...
<mx:Script>
  <![CDATA[
    private function onCreationComplete():void
    {
      // Register "Ctrl+F12" shortcut.
      ComponentTreeWnd.registerKey(this, 123, true, false, false);
    }
  ]]>
</mx:Script>
...
</mx:Application>

Et voilà.

[18-10-2007] Le lien pour télécharger le fichier a été mis à jour.

Comments 4 commentaires »