2017-02-18 23 views
0

我有一个使用Ext.dd.DZZZone启用的网格。我从网格拖动记录并将它们放在树面板中的各个节点上。单记录下降效果很好;但是,我无法成功将多个记录拖动到树节点...只处理了一条记录。该DragZone上实例由以下功能渲染视图:ExtJS6带有复选框的网格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和悬浮窗(未电网插件)的多条记录。非常感谢你。

回答

2

如果你不能使用插件,我很可能会做一些像this Fiddle的事情。您可以自定义拖动的外观,并使用自己的HTML。我不确定这是否是正确的做法,但这是我第一次尝试它。希望它能帮助你弄清楚你想如何解决这个问题。

你的代码不工作的原因是你只能得到一条记录。相反,我使用网格类提供的getSelection方法,该方法返回网格中选定的所有选定项目,因为我创建了一个rowmodel选择模型,其模式为MULTI

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 
     }; 
    } 
},