将项目拖动到TreePanel实例时检测目标treenode

时间:2010-01-25 10:58:19

标签: javascript extjs

我有GridPanel和TreePanel实例。 GridPanel中的元素可以拖动到树状面板中。但我无法检测哪个树节点收到这些拖动的项目。

我使用以下代码初始化树面板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()并计算节点,但我不喜欢这种方法。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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
  }

});
相关问题