2012-08-07 44 views
4

实现使用ExtJS的4.07ExtJS的4解释拖放如何在两个网格或treepanels

假设我有两个treePanels,或者更可能的是,两个网格。我希望能够在两者之间来回拖动项目。做这件事需要什么基本的机制?我愿意看到一些示例代码展示它是如何完成的。我一直无法找到有关如何做到这一点的文档,适用于v4而不是v3。我知道有一个简单的方法,我发现许多文件解释了这样做的臃肿方式。我不明白dd是如何实现的。所以,高层次的概述也是有用的。

回答

4

一个网格有一个DragDrop插件,而一棵树有TreeViewDragDrop插件。

如果您想要从网格或树中拖出,或在网格或树内拖动,请添加插件。在网格的情况下,它会是这个样子:

Ext.create('Ext.grid.Panel', { 

    ... 

    viewConfig: { 
     plugins: { 
      ptype: 'gridviewdragdrop', 
      dragText: 'Drag and drop to reorganize' 
     } 
    }, 

    ... 

}); 

一旦插件被包括在内,你将它从组件拖放事件,对此你可以听。完成上面的例子。

Ext.create('Ext.grid.Panel', { 

    … 

    viewConfig: { 
     plugins: { 
      ptype: 'gridviewdragdrop', 
      dragText: 'Drag and drop to reorganize' 
     }, 

     listeners: { 
      drop: function(node, data, dropRec, dropPosition) { 
       // Do something here. 
      } 
     }   
    }, 

    … 

}); 

你可以看到这个完全工作in this example,及其相应的code。据我所知,在4.07和4.1之间,这方面没有任何改变;

1

drag and drop

总体概述还要检查定制拖放到网格http://docs.sencha.com/ext-js/4-1/#!/example/dd/dragdropzones.html

总的想法是,你必须创建1.拖动元素在收到鼠标按下事件。如果是,则返回拖动数据对象。数据对象可以包含任意的应用程序数据,但是它也应该在ddel属性中包含一个DOM元素来提供一个代理来进行拖动。 2.拖放区域,您决定在'onNodeDrop'事件上做什么

+0

总体概述是在2009年编写的。它是否详细介绍了使用extjs 4.07做这种事情的最佳方式? – Bbb 2012-08-08 17:02:10

+0

我想是的!我使用第二个示例中的代码将ext.Panel拖放到另一个容器中。它的工作正常。 – Jom 2012-08-09 06:27:59

+0

但我在网格或树面板内拖动。这不是插件吗? – Bbb 2012-08-09 13:23:16