代码之家  ›  专栏  ›  技术社区  ›  Thomas Müller

如何将某些内容放入弹性树项目中?

  •  1
  • Thomas Müller  · 技术社区  · 15 年前

    我刚刚在 FlexExamples :

    关于树,需要注意的一点是,它实际上只是一个显示项目的列表。这意味着, 除非文件夹打开,否则您可以将somthing__放入__文件夹。 . 即使在这种情况下,用户体验也不完全正确。因此,尝试将所有内容移出其中一个文件夹,然后折叠该空文件夹。如果您将某个_156;放在__文件夹上,它实际上会在目标文件夹和下面或上面的文件夹之间结束。当您将鼠标移到文件夹上时,会出现一条黑线。如果您打开文件夹(唯一的方法是用箭头指示它是打开的),然后尝试它,您最终会得到一个额外的放置区域,它基本上是打开的空文件夹的下半部分。这也由黑线位置指示。

    如果任何项目的中间部分始终可以是__添加到此文件夹__的放置区域,并且顶部和底部边缘可以分别放置在上方或下方,则会更好。

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

    4 回复  |  直到 13 年前
        1
  •  2
  •   Thomas Müller    15 年前

    我是这样做的:

    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
  •  1
  •   Thomas Müller    15 年前

    我已经按如下方式处理了这个问题:

    • 在Dragover事件处理程序中:启动计时器以确定用户在当前项上拖动该项的时间。
    • 如果当前项没有子项,请添加标题为“将项拖至此处”的新子项。
    • 删除添加的子项(在DragComplete处理程序中)或用户将拖动的项从当前项(在DragOver处理程序中)移走后移除该子项。
        3
  •  1
  •   Eric    15 年前

    这就是我现在要做的:

    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' />");
    

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

        4
  •  0
  •   ed.    13 年前

    我的工作方法:

    子类 AdvancedDataGrid 和覆盖 showDropFeedback . 打电话之前 super.showDropFeedback ,打开要拖动的节点,如果该节点是一个没有子文件夹的空文件夹。

    推荐文章