2010-12-02 38 views
2

J'ai le problème suivant.Problème lors de l'actualisation correcte de l'info-bulle sur un objet itemender dans Flex

J'ai un ArrayCollection qui est agissant en tant que fournisseur de données pour un TileList (appelé favoriteLinksList)

J'utilise un itemRenderer appelé FavoriteItem comme itemRenderer du TileList. Ce FavoriteItem ressemble à ceci:

<?xml version="1.0" encoding="utf-8"?> 
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" 
width="280" height="163" 
horizontalAlign="center" 
paddingLeft="5" paddingRight="5" paddingTop="0" paddingBottom="0" xmlns:ns1="*"> 

<mx:Canvas width="100%" height="100%"> 
    <mx:Image 
    id="thumbnail" 
    width="178" height="115" 
    source="{data.thumbnail}" 
    toolTip = "{data.tooltip}" x="46" y="10"/> 

    <mx:Text 
    id="title" 
    text="{data.tileListTitle}" 
    width="254" 
    toolTip="{data.tooltip}" x="10" y="133"/> 
</mx:Canvas> 

</mx:VBox> 

Comme vous pouvez le voir, les info-bulles pour les deux éléments qu'il contient sont tirées de data.tooltip

Cela fonctionne très bien.

Le problème est l'actualisation de l'info-bulle lorsqu'elle a été modifiée.

Les objets (de type Object) dans ArrayCollection ont chacun une propriété appelée tooltip (évidemment puisque c'est là que l'itemRenderer obtient ses informations).

Lorsque je change cette propriété à sa nouvelle valeur, l'info-bulle de itemRenderer ne change pas pour refléter cela.

J'ai essayé de le définir manuellement en obtenant itemRenderer à partir de l'événement qui est déclenché en cliquant sur l'un des éléments de la liste déroulante mais sans succès.

Exemple:

event.itemRenderer.title.toolTip = event.currentTarget.selectedItem.tooltip; 

après avoir mis à jour l'info-bulle, mais cela donne une erreur de compilation: accès de titre de propriété peut-être définie par une référence avec mx.controls.listClasses de type statique: IListItemRenderer.

J'ai également essayé d'effectuer un refresh() sur la collection de tableaux favoriteLinksList mais cela a donné des résultats mitigés. L'info-bulle a été mise à jour correctement, mais l'un des articles (le premier) de la liste des billets a disparu! Cela semble être un bug Flex. Le fournisseur de données a le même nombre d'éléments avant et après l'actualisation et cela ne se produit pas si je clique sur le premier élément de la liste de prix.

Toute aide est grandement appréciée.

Répondre

0

J'ai trouvé une solution à mon problème.

La liste favoriteLinksList peut être liée et définie en tant que dataProvider de tileList. Cependant, les modifications apportées aux objets individuels n'ont pas été propagées à itemRenderer.

Je pensais qu'il devait y avoir un changement dans la collection de tableaux favoriteLinksList elle-même.

Comme mentionné dans ma question, j'ai déjà essayé d'utiliser favoriteLinksList.refresh() mais cela a fait disparaître le premier élément de la tileList (bien qu'il semble toujours être dans la collection Array). Un bug possible dans Flex peut-être?

Quoi qu'il en soit, a découvert qu'une façon de contourner ce devait effectuer les opérations suivantes:

favoriteLinksList.setItemAt(favoriteObject, favoriteLinksList.getItemIndex(favoriteObject)); 

Essentiellement, je réglage de l'élément à l'index X lui-même afin de ne pas faire quoi que ce soit, mais cela suffit pour le itemRenderer pour actualiser les données pour itemRenderer.

0

Je voudrais aller à faire 2 choses

  1. que l'objet est en fait bindable et le changement se passe et se rendre à l'élément moteur de rendu

  2. solution => remplacer le dispositif de réglage pour les données propriété dans le rendu d'élément, ne pas oublier d'appeler super.data = valeur

-

override public function set data(value:Object):void 
{ 
super.data = value; 
title.toolTip = data.tooltip; 
} 

se trouve avec un point d'arrêt dans cette ligne, vous devriez y accéder lorsque les données changent.

+0

pour une raison quelconque, le code que j'ai collé n'était pas correctement formatter. Voici un lien vers le code: http://pastie.org/1341113 – KensoDev

+0

Je reçois "ne peut pas accéder à la propriété d'une référence d'objet null" pour title.toolTip = data.tooltip Je pensais changer les données en valeur de sorte qu'il soit title.toolTip = value.tooltip mais toujours pas de joie :( La liste favoriteLinksList est [Bindable] et les modifications apportées lors du démarrage de l'application sont reflétées correctement dans la liste des lignes –

+0

Il s'est avéré que même si la liste favoriteLinksList était lisible fournisseur de données à tileList, les modifications apportées aux objets individuels ne doivent pas avoir été propagées à la liste.Telurel trouvé une solution et l'a inclus ci-dessous –