У меня есть объект, который расширен из коллекции массивов.Этот объект должен обращаться к исходному объекту arraycollections и манипулировать им.Когда это происходит, локальная отсортированная / фильтрованная копия данных не синхронизируется с исходными данными.Для правильного выравнивания сортировка / фильтр должны быть повторно применены.
Чтобы сделать это нормально, вы бы вызвали refresh () для arraycollection, но это также транслирует событие refresh.Я хочу обновить сортировку / фильтр без отправки события.
Посмотрев на класс ArrayCollection, я вижу, что он расширен от ListCollectionView.Функция обновления
public function refresh():Boolean
{
return internalRefresh(true);
}
находится в ListCollectionView, и она вызывает раздражающую функцию
private function internalRefresh(dispatch:Boolean):Boolean
{
if (sort || filterFunction != null)
{
try
{
populateLocalIndex();
}
catch(pending:ItemPendingError)
{
pending.addResponder(new ItemResponder(
function(data:Object, token:Object = null):void
{
internalRefresh(dispatch);
},
function(info:Object, token:Object = null):void
{
//no-op
}));
return false;
}
if (filterFunction != null)
{
var tmp:Array = [];
var len:int = localIndex.length;
for (var i:int = 0; i < len; i++)
{
var item:Object = localIndex[i];
if (filterFunction(item))
{
tmp.push(item);
}
}
localIndex = tmp;
}
if (sort)
{
sort.sort(localIndex);
dispatch = true;
}
}
else if (localIndex)
{
localIndex = null;
}
revision++;
pendingUpdates = null;
if (dispatch)
{
var refreshEvent:CollectionEvent =
new CollectionEvent(CollectionEvent.COLLECTION_CHANGE);
refreshEvent.kind = CollectionEventKind.REFRESH;
dispatchEvent(refreshEvent);
}
return true;
}
, эта функция является закрытой и поэтому недоступна для класса, расширяющего ListCollectionView.Кроме того, многое из того, что есть в функции internalRefresh, также является приватным.
Кто-нибудь знает способ вызова internalRefresh из класса, расширяющего ArrayCollection?Или способ предотвратить отправку события обновления при вызове обновления?