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

时间:2012-07-05 17:09:23

标签: extjs extjs4 extjs4.1

我在Extjs 4.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内。我是由于ddGroup设置为另一棵树,因此在树2中存在拖动问题。我还需要树1才能在其中拖动。有没有人有关于此事的建议?我能想到的唯一解决方案是在isValidDropPoint函数上使用覆盖并删除ddGroup限定符,但我真的希望采用更优雅的方法。

1 个答案:

答案 0 :(得分:1)

两棵树的

ddGroup应该是相同的。

在ext 4.2中,您有nodedragover事件在拖动过程中通知Ext.tree.View。 此活动来自Ext.tree.ViewDropZone#isValidDropPoint

所以在ext 4.2中你只需要处理这个事件并决定是否允许drop,事件触发会给你很多信息,所以你可以发现拖动和使用了哪个树the event description

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

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

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

恕我直言,你不需要改变dd组,你需要的只是在某种实现的4.2中处理nodedragover