在我之前编写的应用程序中,我有一个扩展类AdvancedDataGrid
(ADG)。它包含以下代码:
package
{
public class CustomADG extends AdvancedDataGrid
{
....
// This function serves as the result handler for a webservice call that retrieves XML data.
private function webServiceResultHandler(event:ResultEvent):void
{
var resultXML:XML = new XML(event.result);
dataProvider = new HierarchicalData(resultXML.children);
}
....
public function setOpenNodes(maxDepth:int = 0):void
{
var dataCursor:IHierarchicalCollectionViewCursor = dataProvider.createCursor();
while (dataCursor.current != null)
{
if (dataCursor.currentDepth < maxDepth)
dataProvider.openNode(dataCursor.current);
dataCursor.moveNext();
}
dataProvider.refresh();
}
}
}
在这个实现中,该函数setOpenNodes()
运行良好——它完全按照我的意图去做——传递一个数字,并打开dataProvider
该级别或低于该级别的所有节点。
现在,我正在创建一个新的 ADG 类并希望重现此功能:
package view
{
import mx.collections.IHierarchicalCollectionViewCursor;
public class ReportADG extends AdvancedDataGrid
{
public function ReportADG()
{
super();
}
public function setOpenNodes(maxDepth:int = 0):void
{
var dataCursor:IHierarchicalCollectionViewCursor =
dataProvider.createCursor();
while (dataCursor.current != null)
{
if (dataCursor.currentDepth < maxDepth)
dataProvider.openNode(dataCursor.current);
dataCursor.moveNext();
}
dataProvider.refresh();
}
}
}
在dataProvider
父组件中设置:
<view:ReportADG id="reportADG" dataProvider="{reportData}" />
reportData
在另一个文件中设置:
reportData = new HierarchicalData(resultXML.children);
但是,我收到运行时错误:
TypeError: Error #1034: Type Coercion failed: cannot convert ListCollectionViewCursor@6f14031 to mx.collections.IHierarchicalCollectionViewCursor.
我试过铸造dataProvider
为ICollectionView
. 我试过然后铸造ICollectionView
as IHierarchicalCollectionView
。我尝试了各种铸造,但似乎没有任何效果。为什么这在这个新的实现中不能像在过去的实现中那样工作?我需要做什么?
*** 更新:
我开始调试这个。我在我的 ADG 类中添加了一个覆盖设置器,以查看何时设置了 dataProvider:
override public function set dataProvider(value:Object):void
{
super.dataProvider = value;
}
我在这个设置器和我的 setOpenNodes() 函数中添加了一个断点。果然,dataProvider 是在调用 setOpenNodes() 之前设置的,它是 HierarchicalData。但是,当 setOpenNodes() 调试器说 dataProvider 是一个空的 ArrayCollection 时。看来这是根本问题。