2011-02-08 2 views
1

これは私を夢中にしています。私は、高度なデータグリッドを持っています。それは、階層データを持つ配列コレクションのデータプロバイダです。各オブジェクト(子を含む)にはidフィールドがあります。私はADG内からデータをドラッグ&ドロップしようとしています。これが起こると、私はドロップターゲットからidを取得し、ドラッグされたオブジェクトの親フィールドを変更する必要があります。階層データを使用したFlexアドバンストデータグリッド:dragdropイベントでcurrentTargetフィールドにアクセスする方法は?

public function topAccountsGrid_dragDropHandler(event:DragEvent):void{ 
    //In this function, you need to make the move, update the field in salesforce, and refresh the salesforce data... 
    if(checkActivateAccountManageMode.selected == true) { 
     var dragObj:Array = event.dragSource.dataForFormat("treeDataGridItems") as Array; 
     var newParentId:String = event.currentTarget['Id']; 
     dragObj[0].ParentId = newParentId; 
    } else { 
     return; 
    } 
    app.wrapper.save(dragObj[0], 
     new mx.rpc.Responder(
      function():void { 
      refreshData(); 
     }, 
     function():void{_status = "apex error!";} 
     ) 
    ); 
} 

私はは、currentTarget(したがってPARENTIDの変更)dragginが、いないよデータにアクセスすることができます:ここで私が持っているものです。私は階層的なデータが問題の一部だと思うが、私はドキュメンテーションでそれほど見つけることができないのだろうか?何かご意見は?

答えて

2

event.currentTargetはノードではなく、ADG自体です。しかし、ADGはそのデータを内部的に(mx_internalのように)保存するので、必要な情報を取得するのは簡単です。

dragOverハンドラで次のコードスニペット(Flex SDK 4.1でテスト済み)を使用していますが、dragDropハンドラでも動作すると思います。

protected function myGrid_dragDropHandler(event:DragEvent):void 
{ 
    // Get the dragged items. This could either be an Array, a Vector or NULL. 
    var draggedItems:Object = getDraggedItems(event.dragSource); 

    if (!draggedItems) 
     return; 

    // That's our ADG where the event handler is registered. 
    var dropTarget:AdvancedDataGrid = AdvancedDataGrid(event.currentTarget); 

    // Get the internal information about the dropTarget from the ADG. 
    var dropData:Object = mx_internal::dropTarget._dropData; 

    // In case the dataProvider is hierarchical, get the internal hierarchicalData aka rootModel. 
    var hierarchicalData:IHierarchicalData = dropTarget.mx_internal::_rootModel; 
    var targetParent:Object = null; 

    // If it's a hierarchical data structure and the dropData could be retrieved 
    // then get the parent node to which the draggedItems are going to be added. 
    if (hierarchicalData && dropData) 
     targetParent = dropData.parent; 

    for each (var draggedItem:Object in draggedItems) 
    { 
     // do something with the draggedItem 
    } 
} 

protected function getDraggedItems(dragSource:DragSource):Object 
{ 
    if (dragSource.hasFormat("treeDataGridItems")) 
     return dragSource.dataForFormat("treeDataGridItems") as Array; 

    if (dragSource.hasFormat("items")) 
     return dragSource.dataForFormat("items") as Array; 

    if (dragSource.hasFormat("itemsByIndex")) 
     return dragSource.dataForFormat("itemsByIndex") as Vector.<Object>; 

    return null; 
} 
+0

// ADGからdropTargetに関する内部情報を取得します。 var dropData:Object = mx_internal :: dropTarget._dropData;上記のコードはdropDataにundefinedを与えます –

2
var dropData:Object = mx_internal::dropTarget._dropData; 

var dropData:Object = dropTarget.mx_internal::_dropData; 

はこれを試してみてくださいする必要があります。

関連する問題