我有一个使用Ext.dd.DragZone启用的网格。我正在从网格拖动记录并将它们放在树面板中的各个节点上。单记录下降效果很好;但是,我无法成功将多个记录拖到树节点...只处理一个记录。 DragZone通过以下函数在视图渲染上实例化:
renderDD: function(view){
grid = view.up('gridpanel');
grid.dragZone = Ext.create('Ext.dd.DragZone',view.el,{
onBeforeDrag: function(data,e){
return data.messagedata.foldertype==2 ? false : true;
},
getDragData: function(e){
var sourceEl = e.getTarget(view.itemSelector,10),d;
if(sourceEl){
d = sourceEl.cloneNode(true);
d.id = Ext.id();
return(view.dragData = {
sourceEl: sourceEl,
repairXY: Ext.fly(sourceEl).data,
ddel: d,
messagedata:view.getRecord(sourceEl).data
});
}
},
getRepairXY: function(){
return this.dragData.repairXY;
}
});
},
...
任何人都可以使用DragZone和DropZone(不是网格插件)帮助我拖动多个记录。谢谢你。
答案 0 :(得分:2)
如果您无法使用插件,我很可能会执行类似this Fiddle的操作。您可以使用自己的HTML自定义拖动的外观。我不确定这是否是正确的方法,但这是我第一次尝试。希望它可以帮助您弄清楚如何解决这个问题。
您的代码无法正常工作的原因是因为您只获得了一条记录。相反,我正在使用网格类提供的getSelection
方法,该方法返回我在网格中选择的所有选定项目,因为我创建了{{3使用模式rowmodel
选择模型。
getDragData: function (event, b, c) {
var selection = view.getSelection();
var sourceEl = document.createElement('div');
sourceEl.innerHTML = 'blah';
if (selection) {
var d = sourceEl.cloneNode(true);
d.id = Ext.id();
return {
sourceEl: sourceEl,
repairXY: Ext.fly(sourceEl).getXY(),
ddel: d,
records: selection
};
}
},