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