2017-02-18 14 views
0

グリッドがExt.dd.DragZoneで有効になっています。私はグリッドからレコードをドラッグし、ツリーパネルのさまざまなノードにドロップしています。単一のレコードドロップは素晴らしい仕事です。しかし、私は正常に複数のレコードをツリーノードにドラッグすることができません... 1つのレコードだけが処理されます。 DragZoneは、次の関数でビューをレンダリングする上でインスタンス化されます。ExtJS6 DragBox on Grid with CheckBoxモデル

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メソッドを使用しています。これは、 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 
     }; 
    } 
},