Два объекта, созданные с одним и тем же адресом в Flex

У меня проблема с гибкостью, которая вызывает небольшую головную боль!

Я добавляю объекты в ArrayCollection, но при этом другая ArrayCollection также принимает эти изменения, хотя привязки не происходит.

Из отладки я вижу, что два AC имеют один и тот же адрес, но, хоть убей, не могу понять, почему.

У меня есть две коллекции массивов:

model.index.rows //The main array collection

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

Эта фантомная привязка данных происходит только для первой итерации в цикле, а для всех остальных она просто записывается один раз.

Причина, по которой это оказывается проблематичным, заключается в том, что он создает повторяющиеся записи в моей сетке данных.

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();                  
            }

        }

Кто-нибудь еще, кто сталкивался с чем-то похожим, предлагает решение?


person James    schedule 20.05.2010    source источник


Ответы (2)


Я задал тот же вопрос в этом потоке stackoverflow, и он объяснил, что происходит, и что вы можете сделать, чтобы решить эту проблему:

Изменения одной переменной распространяются на другую

Ладислав

person Ladislav    schedule 20.05.2010
comment
Нет проблем, пару месяцев назад была такая же проблема, и, как видите, она была решена прямо здесь :) - person Ladislav; 20.05.2010

После консультации с вышеупомянутой веткой я решил проблему таким образом:

У меня был код, изложенный в другом классе, например:

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

Кажется, это распространяется по всему коду. Вместо этого я изменил эту строку на:

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

как предлагается в упомянутой ветке. Это удалило повторяющуюся запись для меня! : o)

person James    schedule 20.05.2010