2

我在 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 内。我遇到了麻烦在树 2 中拖动,因为 ddGroup 设置为另一棵树。我还需要树 1 不能在其中拖动。有没有人对此提出建议?我能想到的唯一解决方案是在 isValidDropPoint 函数上使用覆盖并删除 ddGroup 限定符,但我真的想要一种更优雅的方法。

4

1 回答 1

1

ddGroup两棵树应该是一样的。

在 ext 4.2 中,您有nodedragover在拖动期间通知 Ext.tree.View 的事件。本次活动从Ext.tree.ViewDropZone#isValidDropPoint.

所以在 ext 4.2 中你只需要处理这个事件并决定是否允许放置,事件触发会给你很多信息,所以你可以发现是拖动以及使用了哪个树的事件描述

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

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

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

恕我直言,您无需更改 dd 组,您只需处理nodedragover4.2 中的某种实现即可。

于 2013-04-26T15:59:36.467 回答