Extjs 在树之间和其中一棵树内拖放

Extjs 在树之间和其中一棵树内拖放,extjs,extjs4,extjs4.1,Extjs,Extjs4,Extjs4.1,我在ExtJS4.1中有两棵树启用了拖放插件。用户可以在这些树之间拖放。在这种情况下,这些树的唯一相关配置是viewConfig: 树1: viewConfig:{ plugins: [ new PmProjectManagement.viewEdit.AvailableCriteriaTreeViewDragDrop({ allowContainerDrop: true,

我在ExtJS4.1中有两棵树启用了拖放插件。用户可以在这些树之间拖放。在这种情况下,这些树的唯一相关配置是viewConfig:

树1:

viewConfig:{
            plugins: [
                new PmProjectManagement.viewEdit.AvailableCriteriaTreeViewDragDrop({
                    allowContainerDrop: true,
                    allowParentInsert: false,
                    expandDelay: 30000,
                    dropGroup: "secondGridDDGroup",
                    dragGroup: "firstGridDDGroup"
                })
            ]
        }
树2:

viewConfig:{
            plugins: [
                new PmProjectManagement.viewEdit.ViewConfigTreeViewDragDrop({
                    allowContainerDrop: true,
                    allowParentInsert: false,
                    expandDelay: 30000,
                    dropGroup: "firstGridDDGroup",
                    dragGroup: "secondGridDDGroup"
                })
            ]
        }

现在我可以很好地从一棵树拖放到另一棵树,但我真正想要的是能够从树1拖动到树2,从树2拖动到树1,并在树2内拖动。我在树2中遇到了拖拽的问题,因为ddGroup被设置为另一棵树。我还需要树1不能在其中拖动。有人对此有什么建议吗?我能想到的唯一解决方案是在isValidDropPoint函数上使用覆盖并删除ddGroup限定符,但我真的希望有一个更优雅的方法来实现这一点。

ddGroup
对于这两个树应该是相同的

在ext 4.2中,有一个
nodedragover
事件,在拖动过程中通知ext.tree.View。 此事件从
Ext.tree.ViewDropZone#isValidDropPoint
开始

因此,在Ext4.2中,您只需处理此事件并决定是否允许拖放,事件触发会为您提供大量信息,这样您就可以找到正在拖动的内容以及使用的树

dragData
参数包含“视图”属性,您可以从中获取树-放置目标树,如
dragData.view.panel

在Ext4.1中你是对的,没有视图通知,sencha的家伙甚至在新版本中放置了一个todo标记,这必须在新版本中实现。是的,您可以扩展
Ext.tree.ViewDropZone
并触发类似的事件,以通知视图有关拖动的情况(类似于4.2)。此外,您还需要扩展
Ext.tree.plugin.TreeViewDragDrop
插件,将刚刚扩展的
Ext.tree.ViewDropZone
插入其中。 它只是覆盖了插件的
onViewRender
方法,并使用您的扩展拖放区

然后使用新插件。另一种方法是覆盖
Ext.tree.ViewDropZone
,以便在应用程序中的任何地方应用


在我看来,您不需要更改dd组,您所需要的只是处理4.2中某种实现的
nodedragover

耶。。。。为此获得了风滚草徽章。有点奇怪,没有人知道怎么做。我想出了一个非常复杂的解决办法。除非有人感兴趣,否则我不会把它贴出来。你看起来是对的。我当时的做法与4.1中描述的方法非常相似,我只是希望当时有一个更简单的解决方案。是的,我在这方面做了很多。然后,您需要在任何节点上从树拖放到网格。但网格显示了树中的节点列表,列表显示在树的selectionchage上(导致树中的默认实现为左键,右键更改树中的选择,等等)。树的选择模型更改鼠标按下时的选择,这是不对的,因为我们想将一个节点拖动到树上,而不显示其列表(就像简单的文件浏览器工作一样),这里有很多paly和changing insight)