使用CheckBox模型在Grid上的ExtJS6 DragZone

时间:2017-02-18 12:03:02

标签: extjs drag-and-drop

我有一个使用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(不是网格插件)帮助我拖动多个记录。谢谢你。

1 个答案:

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