如何防止树项被拖入自己?

时间:2010-01-14 16:42:12

标签: flex drag-and-drop tree

我有一个带有dragMoveEnabled = true的flex树。我想知道,当一个项目被拖入自己或它的孩子。我想在树的onDragOver处理程序中使用DragManager.showFeedback(DragManager.NONE),但无法找到如何使其工作。我正在使用嵌套对象的ArrayCollection作为树的dataSource。

2 个答案:

答案 0 :(得分:1)

    private function onDragOver(event:DragEvent):void {
        event.preventDefault();
        event.currentTarget.hideDropFeedback(event);                

        var index:int = tree.calculateDropIndex(event);
        tree.selectedIndex = index;
        var subCategory:CategoryVO = CategoryVO(tree.selectedItem);

        var currentCategory:CategoryVO = subCategory;

        while(currentCategory.parent != 0) {
        if (currentCategory.parent == _draggedItem.id) {
            DragManager.showFeedback(DragManager.NONE);
            return;
        }
        currentCategory = tree.getParentItem(currentCategory);

        if (currentCategory == null) {
            break;
        }

        DragManager.showFeedback(DragManager.MOVE);
        tree.showDropFeedback(event);
   }

这就是我解决它的方式。

_draggedItem保存当前拖动的项目,在树的onDragEnter处理程序中设置。 CategoryVO是我使用的值对象。

答案 1 :(得分:0)

你可以做点什么:

if(event.currentTarget == event.target){
    //item is being dropped on itself
}