2010-05-09 5 views
2

Je travaille sur une petite galerie de photos. Je crée un fichier XML et j'essaie de le lier à mon contrôle List avec itemrenderer. Cependant, lorsque j'ai essayé de sauvegarder le fichier, j'ai eu accès à une erreur de "propriété" de propriété non définie. Je pensais que nous sommes supposés utiliser "données" pour référencer la ligne actuelle de l'objet de données. Voici mon code ... et merci beaucoup!Flex liste de contrôle itemrenderer question

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> 
<fx:Declarations> 
    <fx:Model id="pictureXML" source="data/pictures.xml"/> 
    <s:ArrayList id="pictureArray" source="{pictureXML.picture}"/> 
</fx:Declarations> 



<s:List id="pictureGrid" dataProvider="{pictureArray}" 
    horizontalCenter="0" top="20"> 
    <s:itemRenderer> 
    <fx:Component> 
    <s:HGroup> 
    <mx:Image source="images/big/{data.source}" /> // where the error happen 
    <s:Label text="{data.caption}"/> // where the error happen 
    </s:HGroup> 

    </fx:Component> 
    </s:itemRenderer> 
</s:List> 


</s:Application> 

Mon xml

<?xml version="1.0"?> 
<album> 
    <picture> 
    <source>city1.jpg </source> 
    <caption>City View 1</caption> 
    </picture> 
    <picture> 
    <source>city2.jpg </source> 
    <caption>City View 2</caption> 
    </picture> 
    <picture> 
    <source>city3.jpg </source> 
    <caption>City View 3</caption> 
    </picture> 
    <picture> 
    <source>city4.jpg </source> 
    <caption>City View 4</caption> 
    </picture> 
    <picture> 
    <source>city5.jpg </source> 
    <caption>City View 5</caption> 
    </picture> 
    <picture> 
    <source>city6.jpg </source> 
    <caption>City View 6</caption> 
    </picture> 
    <picture> 
    <source>city7.jpg </source> 
    <caption>City View 7</caption> 
    </picture> 
    <picture> 
    <source>city8.jpg </source> 
    <caption>City View 8</caption> 
    </picture> 
    <picture> 
    <source>city9.jpg </source> 
    <caption>City View 9</caption> 
    </picture> 
    <picture> 
    <source>city10.jpg </source> 
    <caption>City View 10</caption> 
    </picture> 
</album> 

Je vous remercie de toute aide !!!

+0

L'erreur se produit-elle uniquement sur la ligne mx: Image ou les deux mx: Image et s: Label? – NKijak

Répondre

3
<s:List id="pictureGrid" dataProvider="{pictureArray}" 
    horizontalCenter="0" top="20"> 
    <s:itemRenderer> 
    <fx:Component> 
     <s:ItemRenderer> 
    <s:HGroup> 
    <mx:Image source="images/big/{data.source}" /> // where the error happen 
    <s:Label text="{data.caption}"/> // where the error happen 
    </s:HGroup> 
    </s:ItemRenderer> 
    </fx:Component> 
    </s:itemRenderer> 
</s:List> 

Essayez ceci! Cela fonctionnerait

1

Je pense que la propriété data à laquelle vous essayez d'accéder est hors de portée car elle se trouve dans un itemRenderer en ligne. Essayez d'extraire votre ItemRenderer dans son propre composant au lieu de le faire en tant que composant en ligne.

Vous pouvez également être en mesure d'atteindre dans la en ligne itemRenderer pour obtenir l'accès à chaque propriété de données d'articles, mais cela est plus propre ....

Je suis séparé de votre IR dans son propre composant et tout semble bien ...

<!-- YOUR LIST --> 
<s:List id="pictureGrid" dataProvider="{pictureArray}" 
       horizontalCenter="0" top="20" 
       itemRenderer="TestRenderer"/> // reference new IR class here 

<!-- NEW ITEMRENDERER CLASS --> 
<?xml version="1.0" encoding="utf-8"?> 
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
      xmlns:s="library://ns.adobe.com/flex/spark" 
      xmlns:mx="library://ns.adobe.com/flex/mx" 
      autoDrawBackground="true"> 

     <s:HGroup> 
      <mx:Image source="images/big/{data.source}" /> 
      <s:Label text="{data.caption}"/> 
     </s:HGroup> 

</s:ItemRenderer> 
0

essayez celui-ci

override public function set data(value:Object):void 
    { 
       super.data = value; 
       if (data == null) 
        return; 

       irImage.source = data.path; 
          irText.text = data.caption 

    } 


<s:HGroup> 
      <mx:Image id="irImage" /> 
      <s:Label id="irText"text="{data.caption}"/> 
</s:HGroup> 

si cela fonctionne pas, dites-moi.

Questions connexes