我在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限定符,但我真的希望采用更优雅的方法。
答案 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
。