Flex / AS3树中的条件拖放操作

时间:2010-03-25 13:44:27

标签: flex drag-and-drop tree

大家好日子。

我目前正在使用AS3 / Flex中的分层树结构,并希望在某些条件下启用拖放功能:

  1. 只能移动父级/顶级节点
  2. 父级/顶级节点必须保持此级别;它们不能移动到其他父节点的子节点
  3. 使用树的dragEnter事件,我能够轻松处理条件1。

    private function onDragEnter(event:DragEvent):void
    {
        // only parent nodes (map layers) are moveable
        event.preventDefault();
        if(toc.selectedItem.hasOwnProperty("layer"))
            DragManager.acceptDragDrop(event.target as UIComponent);
        else
            DragManager.showFeedback(DragManager.NONE);
    }
    

    处理第二个条件证明有点困难。我很确定dragOver事件是逻辑的地方。我一直在尝试使用calculateDropIndex,但这总是给我父节点的索引,这无助于检查潜在的丢弃位置是否可接受。下面是我想要完成的一些伪代码。

    private function onDragOver(e:DragEvent):void
    {
        // if potential drop location has parents
            // dont allow drop
        // else
            // allow drop
    }
    

    任何人都可以提供如何实施的建议吗?

1 个答案:

答案 0 :(得分:1)

好的,不确定这个小窍子是否会对你有所帮助,但是当我用XML做到这一点时,我会得到放置目标的对象:

var r:int = dropTarget.calculateDropIndex(evt);
var node:XML = treeCurTemplate.indexToItemRenderer(r).data as XML;

然后我会将目标的localName与我拖动的项目的localName进行比较。 localName是我用来控制树分支的,所以这是有道理的。也许您可以使用它来找到某种方式来处理您的对象。