所以这让我发疯了。我有一个带有数据提供者的高级数据网格,这是一个带有分层数据的数组集合。每个对象(包括子对象)都有一个id字段。我正在尝试从ADG中拖放数据。当发生这种情况时,我需要从放置目标中获取id并更改拖动对象的parentid字段。这就是我所拥有的:
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!";}
)
);
}
我可以访问我是draggin的数据(因此更改parentId),但不能访问currentTarget。我认为分层数据是问题的一部分,但我在文档中找不到多少?有什么想法吗?
答案 0 :(得分: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;
}
答案 1 :(得分:2)
var dropData:Object = mx_internal::dropTarget._dropData;
应该是
var dropData:Object = dropTarget.mx_internal::_dropData;
试试这个。