【问题标题】:How to drop something into a flex tree item?如何将某些东西放入弹性树项目中?
【发布时间】:2011-01-05 11:09:13
【问题描述】:

我刚刚在FlexExamples看到了一条评论:

关于树需要注意的一点是,它实际上只是一个显示项目的列表。这意味着,除非文件夹处于打开状态,否则您无法真正将某些东西“放入”文件夹中。即使在这种情况下,用户体验也不是很正确。因此,请尝试将所有内容移出其中一个文件夹,然后折叠该空文件夹。如果你在文件夹“上”放一些东西,它实际上会在目标文件夹和下面或上面的文件夹之间结束。当您将鼠标移到文件夹上时,会出现一条黑线来表示这一点。如果你“打开”文件夹(判断它打开的唯一方法是通过箭头)然后尝试它,你最终会得到一个额外的放置区,基本上是打开的空文件夹的下半部分。这也由黑线位置表示。

如果任何项目的中间部分总是可以作为“添加到此文件夹”的放置区域,并且顶部和底部边缘可以分别放置在上方或下方,那就更好了。

我刚刚遇到了同样的问题。有人已经解决了这个问题吗?在我的例子中,我在树中有 dragMoveEnabled 并提供了拖动树项的能力。但是不可能将一个项目拖到另一个空的项目中。您只能将拖动的项目放在空项目的上方或下方。

【问题讨论】:

    标签: apache-flex drag-and-drop tree


    【解决方案1】:

    我是这样做的:

    protected function onDragOver(event:DragEvent):void {
        event.preventDefault();
        event.currentTarget.hideDropFeedback(event);                
    
        try {
            var index:int = tree.calculateDropIndex(event);
        } catch(e:Error) {
            DragManager.showFeedback(DragManager.NONE);
            return;
        }
    
        tree.selectedIndex = index;
    
        var draggedOverItem:Object = tree.selectedItem;
    }
    

    也许还有比设置 selectedIndex 和使用 selectedItem 更好的方法?

    【讨论】:

      【解决方案2】:

      我已经处理了如下问题:

      • 在 dragOver 事件处理程序中:启动计时器以确定用户将项目拖到当前项目上方的时间
      • 如果当前项没有子项,则添加一个标题为“将项放在此处”的新子项
      • 在项目被放下(在 dragComplete 处理程序中)或用户将拖动的项目从当前项目移开(在 dragOver 处理程序中)后删除添加的子项

      【讨论】:

        【解决方案3】:

        这就是我现在正在做的事情:

        var i:IListItemRenderer = (event.currentTarget as Tree).indexToItemRenderer((event.currentTarget as Tree).calculateDropIndex(event));
        var x:XML = XML(i.data);
        if (x.children().length() == 0 && x.@title != 'Drop Node Here')
           x.appendChild("<node title='Drop Node Here' />");
        

        我必须以这种方式获取树,因为我的树是动态构建的。但无论如何,这会将一个节点添加到任何没有子节点的节点,并且只会添加一个节点。现在我只需要设置一个计时器,以便它仅在您将鼠标悬停在节点上一秒钟时才会发生。

        【讨论】:

        • 是的,这也是我正在做的,只是我不使用 XML。
        【解决方案4】:

        我的解决方法:

        子类AdvancedDataGrid 并覆盖showDropFeedback。在调用 super.showDropFeedback 之前,如果您拖动的节点是一个没有子文件夹的空文件夹,请打开它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-07
          • 1970-01-01
          相关资源
          最近更新 更多