在我之前编写的应用程序中,我有一个扩展 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()
工作正常 - 它完全按照我的意图执行 - 传递一个数字,并打开 {{中的所有节点1}} 等级或低于该等级。
现在,我正在创建一个新的ADG类,并希望重现此功能:
dataProvider
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
。我尝试了各种各样的铸造,但似乎没有任何效果。为什么这不会像过去的实现一样在这个新的实现中工作?我需要做什么?
***更新:
我开始调试这个。我在我的ADG类中添加了一个覆盖设置器,以查看何时设置了dataProvider:
IHierarchicalCollectionView
我在这个setter和setOpenNodes()函数中添加了一个断点。果然,在调用setOpenNodes()之前设置了dataProvider,它是HierarchicalData。但是,当调试器的setOpenNodes()表示dataProvider是一个null ArrayCollection时。这似乎是根本问题。
答案 0 :(得分:1)
我需要在尝试访问dataProvider属性之前调用commitProperties。
public function setOpenNodes(maxDepth:int = 0):void
{
super.commitProperties();
var dataCursor:IHierarchicalCollectionViewCursor =
dataProvider.createCursor();
while (dataCursor.current != null)
{
if (dataCursor.currentDepth < maxDepth)
dataProvider.openNode(dataCursor.current);
dataCursor.moveNext();
}
dataProvider.refresh();
}