2017-02-18 15 views
0

У меня есть сетка, которая включена с Ext.dd.DragZone. Я перетаскиваю записи из сетки и отбрасываю их на различные узлы в панели деревьев. Одиночные капли записи отлично работают; однако я не могу успешно перетащить несколько записей на узел дерева ... обрабатывается только одна запись. DragZone конкретизируется на рендер зрения следующей функцией:ExtJS6 DragZone on Grid с CheckBox Model

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 (не сетки плагинов). Благодарю вас.

ответ

2

Я бы скорее всего сделал что-то вроде this Fiddle, если вы не можете использовать плагины. Вы можете настроить, как вы хотите, чтобы перетаскивание выглядело с помощью собственного HTML. Я не уверен, что это правильный способ сделать это, но это был мой первый удар. Надеюсь, это поможет вам понять, как вы хотите справиться с этим.

Причина, по которой ваш код не работает, заключается в том, что вы получаете только одну запись. Вместо этого я использую метод getSelection, предоставляемый классом grid, который возвращает все выбранные элементы, которые я выбрал в сетке, потому что я создал модель выбора 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 
     }; 
    } 
},