グループ化コレクションを含む高度なデータグリッドを持つFlexアプリケーションがあります。画面で最初にすべてのノードを閉じてほしい。そこから、ユーザーは1つまたは2つを開いて、その中の情報を表示することを選択できます。ノードの子の1つをクリックすると、ビュースタックを使用するビューが、その子に関する詳細情報を含む画面に変更されます。ただし、最初の画面に戻ると、すべてのノードが再び閉じられた状態で戻ります。
アプリに、開いたままになっているノードと最後にクリックしたアイテムを記憶させ、強調表示してもらいたいです。
IHierarchicalCollectionView(dataProviderName).openNodesを使用して、ビューが変更されたとき、およびこのオブジェクトをIHierarchicalCollectionView(dataProviderName).openNodesに返すときにオブジェクトに割り当ててみました。しかし、アプリはループに入っているようで、IEは応答を停止します。
これは、現状のDataGridのコードです。どんな助けでもいただければ幸いです。
public class SummaryGridBase extends AdvancedDataGrid
{
[Bindable]
protected var _modelLocator:ModelLocator = ModelLocator.getInstance();
[Bindable]
override public function set dataProvider(value:Object):void
{
super.dataProvider = value;
}
override protected function collectionChangeHandler(event:Event):void
{
super.collectionChangeHandler(event);
trace("Summary Grid Trace 1");
if( event is CollectionEvent && (event as CollectionEvent).kind == CollectionEventKind.REFRESH )
{
trace("Summary Grid Trace 2");
this.validateGridAndExpand();
}
}
private function validateGridAndExpand():void
{
this.validateNow();
var rootLevel:ArrayCollection = ModelLocator.getInstance().groupingCollection.getRoot() as ArrayCollection;
for each( var item:Object in rootLevel )
{
this.expandItem( item, true, false );
}
}
protected function changeHandler(event:ListEvent):void
{
trace("Change in Summary Data Selection" +(this.selectedItem.Business));
if( this.selectedItem.Business == null )
{
trace("Im Null");
Alert.show( "Please Expand a Vendor Using The Arrow Beside it \nand Select a Polymer From the List", 'Warning', mx.controls.Alert.OK);
}
else
{
var summaryEvent:SummaryEvent = new SummaryEvent( SummaryEvent.SELECT_SUMMARY, (this.selectedItem.Business as String), (this.selectedItem.Op_Site as String),(this.selectedItem.Vendor as String),(this.selectedItem.Item_Desc as String) );
summaryEvent.dispatch();
}
}
public function SummaryGridBase()
{
super();
}
}