2010-08-11 2 views
1

У меня была конфигурация перетаскивания с сеткой в ​​сетку, но как только я сменил одну из сеток на EditorGridPanel, я больше не мог ее перетаскивать - только к ней. После того, как я нажимаю на строку, я хочу, чтобы перетащить я получаю следующее сообщение об ошибке:ExtJS - EditorGridPanel строки не перетаскиваются?

sm.isSelected is not a function 
if(!sm.isSelected(rowIndex) || e.hasModifier()){ 

ext-all-debug.js (line 45439) 

Есть ли способ, чтобы установить его, так что я могу перетащить строки из EditorGridPanel?

ответ

1

Нашел ответ на это непреднамеренно, глядя на другой пример.

При создании EditorGridPanel, обязательно включают в себя:

selModel:new Ext.grid.RowSelectionModel({singleSelect:true}), 

, чтобы получить функциональность перетаскивания работать.

+0

Любой шанс, что вы могли бы разместить ссылки на примеры вы нашли? –

+0

Убедитесь, что это входит в настройки viewConfig для сетки, а не непосредственно в настройках конфигурации сетки. –

1

Вам не нужно использовать RowSelectionModel, но вам нужно будет написать собственный код для зон перетаскивания. Вот пример того, как использовать перетаскивание с CellSelectionModel:

grid1.on('render', function(grid) {grid1.initializeDragZone (grid1); }); grid2.on('render', function(grid) {grid2.initializeDropZone (grid2); });

initializeDragZone : function(grid) { 
    grid.dragZone = new Ext.dd.DragZone(grid.getEl(), { 
     getRepairXY: function() { 
      return this.dragData.repairXY; 
     }, 

     getDragData: function(e) { 
      var cell = grid.getSelectionModel().getSelectedCell(); 
      var row = grid.getStore().getAt(cell[0]); 
      var data = row.get('id');  //you can put custom data here 
      var sourceEl = grid.getView().getRow(cell[0]); 

      if (sourceEl) { 
       var d = sourceEl.cloneNode(true); 
       d.id = Ext.id(); 
       return grid.dragData = { 
        sourceEl: sourceEl, 
        repairXY: Ext.fly(sourceEl).getXY(), 
        ddel: d, 
        customData: data //our custom data 
       }; 
      } 
     } 
    }); 
} 

initializeDropZone : function(grid) { 
    grid.dropZone = new Ext.dd.DropZone(grid.getView().scroller, { 
     getTargetFromEvent: function(e) { //supports multiple drop zone classes 
      var target = e.getTarget('.some-class1'); 
      target = target? target: e.getTarget('.some-class2'); 
      target = target? target: e.getTarget('.some-class3'); 
      target = target? target: e.getTarget('.some-class4'); 
      return target; 
     }, 

     onNodeEnter : function(target, dd, e, data){ 
      Ext.fly(target).addClass('drop-zone-selected'); //test 
     }, 

     onNodeOut : function(target, dd, e, data){ 
      Ext.fly(target).removeClass('drop-zone-selected'); //test 
     }, 

     onNodeOver : function(target, dd, e, data){ 
      return Ext.dd.DropZone.prototype.dropAllowed; 
     }, 

     onNodeDrop : function(target, dd, e, data){ 
      var rowIndex = grid.getView().findRowIndex(target); 
      var rowRecord = grid.getStore().getAt(rowIndex); 
      var customData = data.customData; 

      //use custom data 

      return true; 
     } 
    }); 
} 
Смежные вопросы