我有这个datagrid,dataProvider是2个不同类型对象(FolderVO和FileVO)的ArrayCollection。 我有一个大小列,在FolderVO的情况下由一个名为contentSize的属性填充,在FileVO的情况下,它由size属性填充(差异由itemrenderer处理)。
这意味着我需要为size列实现一个排序函数,这里是:
protected function sortSize(dataA:Object, dataB:Object):int{
var order:int = 0;
if(dataA is FolderVO && dataB is FolderVO){
order = ObjectUtil.numericCompare(dataA.contentSize, dataB.contentSize);
}else if(dataA is FileVO && dataB is FileVO){
order = ObjectUtil.numericCompare(dataA.size, dataB.size);
}else if(dataA is FolderVO && dataB is FileVO){
order = 1;
}else if(dataA is FileVO && dataB is FolderVO){
order = -1;
}
return order;
}
函数运行得很好,但在return语句之后我得到了这个错误:
Error: Find criteria must contain at least one sort field value.
at mx.collections::Sort/findItem()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\collections\Sort.as:491]
at mx.collections::ListCollectionView/getItemIndex()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\collections\ListCollectionView.as:513]
at ListCollectionViewCursor/collectionEventHandler()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\collections\ListCollectionView.as:2154]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at mx.collections::ListCollectionView/dispatchEvent()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\collections\ListCollectionView.as:833]
at mx.collections::ListCollectionView/internalRefresh()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\collections\ListCollectionView.as:1275]
at mx.collections::ListCollectionView/refresh()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\collections\ListCollectionView.as:402]
at mx.controls::DataGrid/sortByColumn()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\controls\DataGrid.as:3560]
at mx.controls::DataGrid/headerReleaseHandler()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\controls\DataGrid.as:4909]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at mx.core::UIComponent/dispatchEvent()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\UIComponent.as:9298]
at mx.controls.dataGridClasses::DataGridHeader/mouseUpHandler()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\controls\dataGridClasses\DataGridHeader.as:1259]
您可能会注意到,错误发生在flex框架本身,而不是我的代码中。 所以我真的被困在这里。非常感谢帮助。
答案 0 :(得分:4)
好的,我自己找到了......
显然错误是由于某些时候Flex框架假定ArrayCollection中包含的所有对象都具有 size 属性,因此即使在使用Im时它也会尝试获取它的值自定义排序功能。
解决方法是在我的FolderVO中添加一个虚拟的 size 属性,默认值为0.
希望这对那里的人有帮助。
Cheerz!