私が書いた以前のアプリケーションでは、拡張されたクラス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
。あらゆる種類のキャストを試しましたが、何も機能していないようです。以前の実装のように、この新しい実装でこれが機能しないのはなぜですか? 私は何をする必要がありますか?
*** アップデート:
これをデバッグし始めました。dataProvider がいつ設定されているかを確認するために、ADG クラスにオーバーライド セッターを追加しました。
override public function set dataProvider(value:Object):void
{
super.dataProvider = value;
}
このセッターと setOpenNodes() 関数にブレークポイントを追加しました。案の定、dataProvider は setOpenNodes() が呼び出される前に設定されており、それは HierarchicalData です。ただし、setOpenNodes() を実行すると、デバッガーは dataProvider が null ArrayCollection であると通知します。これが根本的な問題のようです。