在我的 dropZone 中,onNodeDrop 函数不起作用!
notifyDrop 有效,但 onNodeDrop - 不是。而且我的可拖动元素仅限于放置到放置区域。
在我的 dropZone 中,onNodeDrop 函数不起作用!
notifyDrop 有效,但 onNodeDrop - 不是。而且我的可拖动元素仅限于放置到放置区域。
在 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(网格面板、数据视图或任何其他组件)。如您所见,我添加了一些不允许多次删除同一个项目的逻辑。