Flex树控制拖放.item位置

时间:2009-12-09 11:20:56

标签: flex actionscript-3 drag-and-drop tree

刚遇到树控制拖拽的困难..
假设我有启用拖放功能的树。 我想要在哪个节点内droped节点(id)。

1]如果我在“Cat3”中拖动“Cat1”节点,我想识别 “cat1”和“cat3”的兄弟姐妹的ids。

2]一般来说,我想知道当前元素的id与
一起移动 它的新父母和新职位并保存这些位置。

3]“cat4”也被移到“cat3”之外,我想知道它的位置及其兄弟姐妹的身份。

<mx:XML id="treeDP">
        <node label="Categories">
          <node label="Cat1" id="1" isBranch="true"/>            
          <node label="Cat2" id="2" isBranch="true"/>

           <node label="Cat3" id="3" isBranch="true">
             <node label="Cat4" id="4" isBranch="true"/>
         </node>          
        </node>
</mx:XML>

    <mx:Tree id="compBalanced" 
        width="420" height="439" 
        dataProvider="{treeDP}" 
        showRoot="false"
        labelField="@label"
        doubleClickEnabled="true"
        dragEnabled="true" 
        dropEnabled="true" 
        dragDrop="onDragDrop(event)"            
            />

3 个答案:

答案 0 :(得分:3)

当我必须检查接收孩子的节点时,我遇到了这样的问题。 为了得到节点父节点,我使用了这个:

public function getObjectTarget() : Object {
   var dropData : Object = tree.mx_internal::_dropData as Object;
   if (dropData.parent != null) {
      return dropData.parent;
   } else {
          // if there is not parent (root of the tree), I take the root directly
      var renderer : IListItemRenderer = tree.indexToItemRenderer(0);
      return renderer.data;
   }

希望这会对某人有所帮助

答案 1 :(得分:0)

通过在树上听dragComplete暂时解决了这个问题 dragComplete =“handleDragComplete(事件)

当拖动完成后,我从树中获取更改的数据提供者,然后递归 在已更改的数据提供者中搜索“拖动的项目”(“id”+“label”)以查找其在树中的位置,即。删除所选节点的节点的“id”(父节点)。 并将保存发送到数据库api。

任何人都有更好的选择。 请回复

谢谢:)

答案 2 :(得分:0)

DragEvent包含一个dragSource元素。它包含被拖动的元素。 在树的情况下,它是“treeItems”类型。 var items:Array = event.dragSource.datForFormat("treeItems") as Array; 拖动树节点时,只有一个元素items[0]可以很容易地位于(更改的)树内。

然而,似乎没有办法显示 拖到某个地方)。 'calculateDropIndex()'函数仅计算放置节点的虚拟矩阵中的行(但不是列/缩进)。这纯粹取决于y坐标,并且可以是远大于节点总数的索引,而例如在最后一个节点之后的行中,相同的索引可以将该元素作为最后一个子节点的子节点,与最后一个子节点并行或与根节点并行。我还没有找到一种简单的方法(除了复制Tree dragDrop处理程序中的代码)