2012-07-05 48 views
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限定符,但我真的很喜欢这种更优雅的方法。

+0

耶...有这个风滚草徽章。有点惊讶没有人知道如何做到这一点。 – Reimius 2012-07-12 19:10:16

+0

我想出了一个非常复杂的解决方案。除非有实际的兴趣,否则我不会发布它。 – Reimius 2012-08-30 20:30:04

回答

1

ddGroup对于两棵树应该是相同的。

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

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

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

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

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

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

+0

你看起来正确。当时我做的和4.1的描述方式非常类似,我只是希望当时有一个更简单的解决方案。 – Reimius 2013-04-26 16:03:41

+0

是的,我玩过很多。这个噩梦就是你需要从树上拖放到任何节点上的网格。但是网格显示了树的节点列表,并且树的选择树上显示了列表(导致左侧树中的键默认实现,右侧树中的选择改变等)。树的选择模型改变了鼠标的选择,这是不正确的,因为我们想要拖拽一个节点到树中而不显示它的列表(像简单的文件浏览器那样),这里有很多palys和不断变化的见解) – babinik 2013-04-26 16:13:13