Dans Flex 3, il était auparavant possible de lier une propriété de composant dans un itemRenderer via outerDocument. Ainsi, par exemple, s'il y avait une image à l'intérieur d'un itemRenderer qui n'a été affiché sur une condition donnée du parent, quelque chose comme cela fonctionne parfaitement:Adobe Flex 4.5 Spark: liaison du composant ItemRenderer au parent
<mx:itemRenderer>
<mx:Component>
<mx:Label text="{data}"/>
<mx:Image id="img" visible="{outerDocument.ShowImage}" includeInLayout="{outerDocument.ShowImage}"/>
</mx:Component>
</mx:itemRenderer>
où le document externe (pas la liste, mais le MXML la liste est) contenu quelque chose comme
[Bindable]
public function get ShowImage():void
{
return showImage;
}
public function set ShowImage(val:Boolean):void
{
showImage = val;
}
J'ai essayé de faire la même chose dans Flex 4.5 en utilisant renderers élément Spark en utilisant parentDocument, mais il ne semble pas être au courant de la liaison. Lorsque je fais cela dans Flex 4.5, le itemRenderer ne semble pas savoir quand le parentDocument ShowImage change.
Quelqu'un at-il vu ce problème et est en mesure d'offrir une solution?
EDIT: Ajouter Spark Source Comme l'a demandé ici est ma source d'allumage:
MyItemRenderer.mxml
<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">
<s:Label id="myLabel" text="{data}/>
<s:Image src="something.png" visible="{parentDocument.ShowImage}" includeInLayout="{parentDocument.ShowImage}"/>
</s:ItemRenderer>
RendererContainer.mxml
<s:Panel xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<fx:Script>
<![CDATA[
private var showImage:Boolean = false;
[Bindable]
public function set ShowImage(val:Boolean):void
{
showImage = val;
}
public function get ShowImage():Boolean
{
return showImage;
}
]]>
</fx:Script>
<!-- Content Group -->
<s:List id="lstCell" width="100%" height="100%" itemRenderer="MyItemRenderer">
</s:List>
</s:Panel>
Ok, donc il y a une case à cocher dans un wrapper en dehors de RendererContainer.mxml qui distribue un événement personnalisé qui est géré en modifiant un Boolean Bindable. La modification de var modifie alors la propriété ShowImage sur mon composant RendererContainer. Je m'attendrais à ce que MyItemRenderer récupère la liaison, mais cela ne semble pas fonctionner.
Donc, mon enveloppe extérieure accéderait ShowImage comme celui-ci
<comp:RendererContainer id="myId" ShowImage="{myCheckbox.selected}"/>
Afficher le code pour l'exemple 4.5. –
Normalement, pour créer un objet Bindable, vous devez spécifier un événement dans la balise Bindable Metadata et distribuer cet événement à partir de la méthode set. Cela dit, avez-vous des erreurs? OU la valeur dans itemRenderer ne change tout simplement pas? – JeffryHouser
Pas d'erreur. Le itemRenderer n'est pas en train de se mettre à jour. Fondamentalement, j'ai un "panneau de contrôle" qui contient des options pour ce qui peut être affiché dans le itemRenderer. Le panneau de contrôle a juste une case à cocher qui distribue un événement lorsque la valeur change.Le gestionnaire de cet événement met à jour la propriété ShowImage (qui est marquée Bindable) mais lorsque je coche la case, je ne vois tout simplement pas les images apparaître ou disparaître dans l'itemrenderer. Mauvais poster le code pour le 4.5 – Shawn