2010-01-25 63 views
0

我有GridPanel和TreePanel实例。 GridPanel中的元素可以被拖入树形面板。但我无法检测哪个树节点接收这些拖动的项目。将项目拖动到TreePanel实例时检测目标treenode

我初始化用下面的代码树面板DD(从Ext.tree.TreePanel派生类中的方法):

initDD: function() { 
    var treePanelDropTargetEl = this.getEl(); 
    var treePanelDropTarget = new Ext.dd.DropTarget(treePanelDropTargetEl, { 
     ddGroup: 'ddgroup-1', 
     notifyDrop: function(ddSource, e, data) { 
      // do something with data, here I need to know target tree node 
      return true; 
     } 
    }); 
} 

所以,我怎么能找出在“notifyDrop”这树节点接收到所拖动的项目处理程序。我可以采取e.getTarget()并计算节点,但我不喜欢那种方法。

回答

1

如果您使用TreeDropZone(而不是DropTarget),您将拥有更多特定于树的选项和事件,如onNodeDrop。请注意,有许多方法可以用Ext JS来完成DnD。

+0

谢谢你的点,将尝试使用TreeDropZone – 2010-01-26 04:21:47

+0

不,这是行不通的。我仍然无法处理外部项目的丢弃:拖动树节点时调用的事件,并且在从GridPanel拖动项目时不调用。 – 2010-01-26 05:44:38

0

这是某种形式的解决方案

MyTreePanel = Ext.extend(Ext.tree.TreePanel, { 
    listeners: { 
    nodedragover: function(e) { 
     // remember node 
     this.targetDropNode = e.target; 
    } 
    } 

    initComponent: function() { 
    // other initialization steps 
    this.targetDropNode = false; 
    var config = { 
     // ... 
     dropConfig: { 
     ddGroup: 'mygroupdd', 
     notifyDrop: function(ddSource, e, data) { 
      // process here using treepanel.targetDropNode 
     } 
     } 
     } 
     // ... 
    }; 
    // other initialization steps 
    } 

});