ArrayCollection не возвращает абсолютную длину, когда для него применена функция фильтра - PullRequest
0 голосов
/ 24 апреля 2011

Мой поставщик данных для сетки - это arrayCollection, которая динамически загружается с объектами.например: объект person с persionID, PersonName .. и т. д.Я применил функцию фильтра к своему провайдеру данных на основе personID.ниже моя функция

public function FilterFunc(item:Object):Boolean
            {
                var same:Boolean=String(item.personID ) == filterpersonID ;
                return same;
            }

эта функция прекрасно работает всякий раз, когда я изменяю свой filterpersonID на person1, person2 ..., показывая соответствующие изменения.Но когда я применил функцию, чтобы ограничить количество элементов в сетке, например

private function DPSizeHandler(dp:ArrayCollection):void
            {
                if (dp.length > 100)
                    dp.removeItemAt(0);
            }

, эта функция вызывается всякий раз, когда новый объект добавляется в коллекцию массивов.Теперь проблема состоит в том, что dp.length в вышеприведенной функции возвращает только абсолютное значение объекта no конкретного человека, к которому была применена функция filterFunction.Это не ограничивает размер других объектов, которые сталкиваются с тысячами проблем с памятью.как только я изменяю функцию filterFunction на другой personID, он начинает медленно ограничивать соответствующие объекты personID.Таким образом, sizeHandler () ограничивает только объекты personID, для которых была применена функция фильтра, а не целые объекты, это проблема.

PS: я загружаю эти объекты в коллекцию массивов из очереди JMS, используя потребительский компонент BlazeDSдовольно быстроя был бы очень признателен за любую помощь по этой проблеме

Ответы [ 2 ]

2 голосов
/ 24 апреля 2011

Изменение условия фильтра не приведет к немедленному обновлению коллекции массивов, для этого вам нужно сначала вызвать dp.refresh (), который применит фильтр к вашей внутренней коллекции, а затем вы получите правильную длину.

1 голос
/ 24 апреля 2011

Доступ к необработанному, нефильтрованному списку можно получить через

dp.list.length;

, если вы это подразумеваете под «абсолютным»;

...