Нежелательная привязка - PullRequest
       7

Нежелательная привязка

0 голосов
/ 15 апреля 2010

Ситуация проста.У меня есть сетка данных, которая получает данные от веб-службы.

Когда данные из веб-службы извлекаются, она вызывает следующую функцию:

private function onListReg():void
{
    arrRegOld = WSAutoreg.list.lastResult as ArrayCollection;
    arrReg = WSAutoreg.list.lastResult as ArrayCollection;

    dgReg.dataProvider = autoreglist;
}

dgReg - это сетка данных.переменные arr - это ArrayCollections, определенные следующим образом:

private var arrRegOld:ArrayCollection = new ArrayCollection;

[Bindable]
private var arrReg:ArrayCollection = new ArrayCollection;

Смысл в том, что когда я нажимаю кнопку обновления, он сравнивает arrRegOld с arrReg и проверяет, есть ли какие-либо значения.Проблема заключается в том, что всякий раз, когда я изменяю значения в Datagrid, он изменяется как в dataProvider, так и в обоих ArrayCollections.

Кто-нибудь знает, почему это происходит?Что я должен сделать, чтобы привязка относилась только к одной коллекции ArrayCollection?

Оцените любой совет.- Майк

1 Ответ

1 голос
/ 15 апреля 2010

Ваши списки совместно используют одни и те же объекты, если вы измените первый элемент из arrReg, вы увидите изменение также в arrRegOld - оно не связано с привязкой. Вам нужно клонировать объекты. У вас есть несколько вариантов:

а) Реализация метода клонирования для ваших объектов (рекомендуется) б) Используйте общий метод, как этот:

            private function clone(source:Object):*             
            {               
                var array:ByteArray=new ByteArray();                    
                array.writeObject(source);                  
                array.position=0;                   
                return(array.readObject());             
            }

и вызовите arrRegOld = clone (arrReg); после arrReg = WSAutoreg.list.lastResult as ArrayCollection;

...