2010-05-20 3 views
0

J'ai un problème dans flex qui cause un peu de mal de tête!Deux objets créés avec la même adresse dans Flex

J'ajoute des objets à une ArrayCollection mais, ce faisant, une autre ArrayCollection récupère également ces modifications même s'il n'y a pas de liaison.

Je peux voir à partir du débogage que les deux AC ont la même adresse mais pour la vie de moi ne peut pas comprendre pourquoi.

J'ai deux collections Array:

model.index.rows //The main array collection 

model.index.holdRows //The array collection that imitates the above 

Ces données fantôme liaison se produit uniquement pour la première itération dans la boucle et pour tous les autres, il me contenterai écrire la fois.

La raison pour laquelle cela s'avère gênant est qu'il crée des entrées en double dans mon DataGrid.

public override function handleMessage(message:IMessage):void 
    { 

     super.handleMessage(message); 
     if (message is IndexResponse) 
     { 
      var response:IndexResponse = message as IndexResponse; 

      model.index.rows.removeAll(); 
      model.index.indexIsEmpty = response.nullIndex; 

      if (model.index.indexIsEmpty !== true) 
      { 

       //Update the index model from the response. Note: each property of the row object will be shown in the UI as a column in the grid 
       response.index.forEach(function(entry:EntryData, i:int, a:Array):void 
        { 
         var row:Object = { fileID: entry.fileID, dadName: entry.dadName }; 

         entry.tags.forEach(function(tag:Tag, i:int, a:Array):void 
          { 
           row[tag.name] = tag.value; 
          }); 

         model.index.rows.addItem(row); 

        }); 

       if(model.index.indexForNetworkView == true){ 

       model.index.holdRows.source = model.index.holdRows.source.concat(model.index.rows.source); 
       model.index.indexCounter++; 
       model.index.indexForNetworkView = false; 
       controller.indexController.showNetwork(model.index.indexCounter);     
       } 
       model.index.rows.refresh(); 
       controller.networkController.show();     
      } 

     } 

Quelqu'un at-il d'autre qui a rencontré quelque chose simillar proposer une solution?

Répondre

0

J'ai demandé dans ce fil stackoverflow la même question et il est expliqué ce qui se passe, et que pouvez-vous faire pour le résoudre:

Changes to one variable propagates to another

Ladislav

+0

Bonne aide merci beaucoup! – James

+0

Pas de problème, a eu le même problème quelques mois en arrière et comme vous pouvez le voir a également été résolu ici :) – Ladislav

0

Après consultation du susmentionné J'enfile résolu le problème ainsi:

J'avais le code figurant dans une autre classe comme ceci:

model.index.rows = model.index.holdRows; 

Cela semble se propager dans tout le code. Au lieu de cela, j'ai changé cette ligne à:

model.index.rows = new ArrayCollection(model.index.holdRows.source.concat()); 

comme suggéré dans le fil mentionné. Cela a supprimé l'entrée en double pour moi! : o)

Questions connexes