0

在我的 dropZone 中,onNodeDrop 函数不起作用!

notifyDrop 有效,但 onNodeDrop - 不是。而且我的可拖动元素仅限于放置到放置区域。

4

1 回答 1

0

在 ExtJS 中覆盖默认拖放实现的方法如下:

v.dropZone = new Ext.dd.DropZone(v.getEl(), {

  // GetTarget
  getTargetFromEvent : function(e) {
    return {
      x : e.getX() - this.DDMInstance.deltaX,
      y : e.getY() - this.DDMInstance.deltaY
    };
  },

  // OnNodeOver
  onNodeOver : function(target, dd, e, data) {
    var rv = Ext.dd.DropZone.prototype.dropNotAllowed;
    if (data && data.selectedRecords.length == 0) {
      return Ext.dd.DropZone.prototype.dropNotAllowed;
    } else {
      rv = Ext.dd.DropZone.prototype.dropAllowed;

      Ext.Array.each(data.selectedRecords, function(selRec, index) {
        if (v.getStore().find('id', selRec.getId()) > -1) {
          rv = Ext.dd.DropZone.prototype.dropNotAllowed;
        }
      });
      return rv;
    }

  },

  // OnNodeDrop
  onNodeDrop : function(target, dd, e, data) {
    var dropValid = true;
    Ext.Array.each(data.selectedRecords, function(selRec, index) {
      if (v.getStore().find('id', selRec.getId()) == -1) {
        v.getStore().add(selRec);

        // set selection
        data.dataView.getSelectionModel().select(selRec.index);

      } else {
        dropValid = false;
      }
    });
    return dropValid;
  }
});

其中 v 是 dropzone(网格面板、数据视图或任何其他组件)。如您所见,我添加了一些不允许多次删除同一个项目的逻辑。

于 2013-10-03T14:34:14.823 回答