J'essaie de composer l'une des parties de l'interface utilisateur d'une application AIR que je développe dans Flex. Dans cet exemple, je souhaite afficher les informations de fichier sur une seule ligne (avec une icône, du texte/lien et la taille).Utilisation d'un composant MXML composite à partir d'ActionScript
Mon code ressemble à ceci (le composant est appelé FichierAffiche):
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
public function set iconType(source:String):void {
this.ficon.source = source;
}
public function set fileName(name:String):void {
this.fname.htmlText = name;
}
public function set fileSize(size:String):void {
this.fsize.text = size;
}
]]>
</mx:Script>
<mx:Image id="ficon" />
<mx:Label id="fname" left="20" right="30" text="Filename" />
<mx:Label id="fsize" right="0" text="0 K" />
</mx:Canvas>
Lorsque j'utilise ce composant dans ma principale application, l'actionscript ressemble:
for each (var file:XML in result.files) {
var fd:FileDisplay = new FileDisplay();
fd.fileName = '<a href="blah">'+file.name+'</a>';
fd.iconType = getFileTypeIcon(file.name);
fd.fileSize = getFileSizeString(file.size);
this.file_list.addChild(fd);
}
Toutefois, lorsque Je fais cela, j'obtiens une erreur: Erreur # 1009: Impossible d'accéder à une propriété ou méthode d'une référence d'objet null. Cela est dû au fait que les composants enfants de FileDisplay sont null (ou du moins, ils apparaissent dans le débogueur).
Est-ce que quelqu'un sait s'il y a un moyen de contourner cela? Suis-je censé attendre des événements indiquant que les composants enfants ont été créés? Y at-il un modèle plus commun qui résout ce problème? Pour l'instant je peux faire manuellement tout dans ActionScript dans mon application principale (créer un Canvas et y ajouter des enfants) mais j'apprécierais toute idée sur la façon de séparer le code plus proprement.
Merci pour la perspicacité. Les docs sur l'utilisation de composants personnalisés "avancés" sont assez déroutants. J'ai l'impression que mon cas n'est pas si rare qu'ils devraient probablement avoir plus d'exemples comme ça. –