apache-flex Flex树控件拖放项位置

hjqgdpho  于 2022-11-01  发布在  Apache
关注(0)|答案(3)|浏览(165)

只是在树控件拖放时遇到了困难。
假设我有一个允许拖放的树,我想把哪个节点(id)放到哪个节点里面。
1]如果我将“Cat1”节点拖到“Cat3”内,我希望标识“cat1”和“cat3”的同级节点的id。
2]一般来说,我想知道当前元素的id,这些元素将沿着
并保存这些位置。
3]当“cat4”移到“cat3”之外时,我想知道它的位置和它的兄弟id。

<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)"            
            />
flvtvl50

flvtvl501#

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

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;
   }

我希望这会对一些人有所帮助

yc0p9oo0

yc0p9oo02#

我通过监听树上的dragComplete暂时解决了这个问题
dragComplete=“handleDragComplete(事件)
当拖拽完成后,我从树中得到改变的数据提供者,然后我在改变的数据提供者中递归地搜索“拖拽的项”(“id”+“label”),以找到它在树中的位置,即,所选节点被放置在其中的节点(父节点)的“id”,并激发保存到数据库API。
任何人都有更好的选择。请回复
谢谢你:)

raogr8fs

raogr8fs3#

DragEvent包含一个dragSource元素。它包含被拖动的元素。在树的情况下,它的类型是“treeItems”。var items:Array = event.dragSource.datForFormat("treeItems") as Array;当拖动一个树节点时,只有一个元素,items[0],它可以很容易地在(改变的)树中找到。
然而,似乎有一种说法,无法显示 * 如果 * 在当前拖动位置释放此项目 * 将 * 插入 * 的位置(例如,防止节点被拖到某个位置)。"calculateDropIndex()'函数只计算行(但不是列/缩进)。这完全取决于y-坐标,并且可以是远大于节点总数的索引,而例如在最后节点之后的行中,相同的索引可以丢弃作为最后子节点的子节点的元素,是与最后一个子节点平行还是与根节点平行。我还没有找到一种简单的方法来区分(除了复制Tree dragDrop处理程序中的代码)

相关问题