2009-11-07 7 views
0

J'ai la fonction ci-dessous en créant de nouveaux panneaux à l'intérieur de mon ViewStack .. Cela fonctionne bien et ils sont super .. Cependant, j'essaie de mettre du contenu dans les panneaux, mais j'échoue.Flex Appel ItemRenderer dans un nouveau panneau()

 private function viewstack_addChild(name:String):void { 
      //if (accordion.numChildren < MAX_CHILDREN) { 
       var p:Panel = new Panel(); 
       p.id = name; 
       p.name = name; 
       p.title = name; 
       p.percentWidth = 100; 
       p.percentHeight = 100; 
       var display:PageItemRenderer = new PageItemRenderer; 
       p.finishPrint(display); 
       var randColor:uint = Math.random() * 0xFFFFFF; 
       p.setStyle("backgroundColor", randColor); 
       myViewStack.addChild(p); 
       //myViewStack.selectedChild = p; 
      //} 
     } 

je une coutume itemRenderer appelé PageItemRenderer qui acceptera les données XML et l'afficher, mais je ne peux pas comprendre comment appeler le moteur de rendu pour chaque panneau ..

Toute aide serait grandement appréciée.

EDIT: Ajout PageItemRenderer.mxml

<?xml version="1.0" encoding="utf-8"?> 
<mx:HBox 
height="100%" 
width="100%" 
xmlns:mx="http://www.adobe.com/2006/mxml"> 

<mx:HBox width="100%" height="100%"> 
    <mx:VBox height="100%" width="20%" horizontalAlign="center" verticalAlign="middle"> 
     <!-- software image --> 
     <mx:Image source="{data.image}" width="90%" height="90%"/> 
    </mx:VBox> 

    <!-- person's name --> 
    <mx:VBox height="100%" width="80%" horizontalAlign="left" verticalAlign="middle"> 
     <mx:Label width="100%" height="100%" text="{data.name} {data.version}" color="#FFAE00"/> 
     <mx:Label width="100%" height="100%" text="{data.description}" color="#FFFFFF"/> 
    </mx:VBox> 
</mx:HBox> 

</mx:HBox> 

Répondre

1

Le Panel est juste une classe de conteneur, et votre PageItemRenderer doit étendre certains UIComponent, donc le faire dans votre méthode viewstack_addChild:

var p:Panel = new Panel(); 
// set the properties on p 
var pR:PageItemRenderer = new PageItemRenderer(); 
var data:Object; 
// Do something to get the data to be displayed; 
pR.data = data; 
p.addChild(pR); 
myViewStack.addChild(p); 

EDIT : modifié pR.setData à pR.data EDIT: modifié pR.data(data) à pR.data = data;

+0

Salut LynchRJ, je vous remercie pour la réponse, mais je ne suis toujours pas sûr de la façon d'appeler réellement l'itemrenderer là pour la variable de données .. – medoix

+0

Je suis allé de l'avant et fait une correction au code. Une baisse du rendu d'élément est une classe UIComponent qui implémente mx.core.IDataRenderer mx.controls.listClasses.IDropInListItemRenderer. D'après ce que je comprends, vous voulez l'utiliser dans un Panel au lieu d'un contrôle List ou autre. Un contrôle List crée des instances du moteur de rendu et définit les données sur l'élément. Si vous voulez l'utiliser en dehors de ce contexte, créez simplement une instance, définissez les données et ajoutez-la en tant qu'enfant de l'élément conteneur dans lequel vous voulez l'insérer. –

+0

Désolé, je veux dire qu'il implémente le mx. Les interfaces core.IDataRenderer et mx.controls.listClasses.IDropInListItemRenderer. –

Questions connexes