Я только что нашел обходной путь для этой ошибки (я использую SDK 3.5, но я думаю, что исправление 4.1 было бы почти таким же).Проблема заключается в методе «current ()» класса HierarchicalCollectionViewCursor.
Он не перехватывает CursorError, вызванную недопустимой закладкой.
Шаг 1 - создать лучший курсорclass:
public class HierarchicalCollectionViewCursor2 extends HierarchicalCollectionViewCursor
{
public function HierarchicalCollectionViewCursor2(collection:HierarchicalCollectionView, model:ICollectionView, hierarchicalData:IHierarchicalData)
{
super(collection, model, hierarchicalData);
}
override public function get current() : Object
{
// original HierarchicalCollectionViewCursor class fails to catch the "bookmark no
// longer valid" Error, which is thrown as a CollectionViewError instance in ListCollectionView,
// but transformed to a CursorError within the same class
try {
var result:Object = super.current;
}
catch (e:CursorError) {
result = null;
}
// done
return result;
}
}
Шаг 2 - создать класс HierarchicalCollectionView, который возвращает этот новый курсор:
use namespace mx_internal;
public class HierarchicalCollectionView2 extends HierarchicalCollectionView
{
public function HierarchicalCollectionView2(hierarchicalData:IHierarchicalData=null, argOpenNodes:Object=null)
{
super(hierarchicalData, argOpenNodes);
}
override public function createCursor() : IViewCursor
{
return new HierarchicalCollectionViewCursor2(this, treeData, this.source);
}
}
Шаг 3 - фактически использовать этот новый класс HierarchicalCollectionView2 в качестве поставщика данных..
var itemsAC:ArrayCollection = new ArrayCollection();
// add items etc
this.adgDataProvider = new HierarchicalCollectionView2(new HierarchicalData(itemsAC));
Теперь вы думаете, что все хорошо, НО драма не была бы завершена без очередной досадной ошибки Flex-SDK.В этом случае это:
https://bugs.adobe.com/jira/browse/FLEXDMV-1846
Итак, шаг 4 заключается в создании подкласса компонента AdvancedDataGrid, как описано в проблеме с ошибкой.
Вот и все - работает для меня!