2014-11-05 5 views
1

В ExtJS5 У меня есть TreePanel с включенным перетаскиванием. Когда я перетаскиваю узел с дочерними элементами из исходного дерева в целевое дерево, копируется только родительский узел.ExtJS5 tree dragdrop deep copy

Если я пытаюсь глубоко клон в «beforedrop» слушатель, он не со следующей ошибкой: Ext.data.Model.constructor(): Bad Модели Конструктор аргумент 2 - «сеанс» не Session

Вид имеет viewcontroller, но не имеет viewmodel.

определение дерева в виде:

xtype: 'treepanel', 
        itemId: 'myProjectsTree', 
        rootVisible: false, 
        viewConfig: { 
         plugins: { 
          ptype: 'treeviewdragdrop', 
          enableDrag: false, 
          enableDrop: true 
         }, 
         listeners: {        
          beforedrop: 'doDrop',.... 

В контроллере:

doDrop: function(dropNode, dragNode, overModel) { 
     var node = dragNode.records[0]; 
     var clonedNode = node.copy('111', true);<--- failed here 

Я видел сессии, определенные в сценарии ViewModel. Должна ли функция копирования определять сеанс просмотра? Есть ли способ обойти это. Есть ли ошибка в ExtJS5.

Любая помощь очень ценится!

ответ

2

AFAIK есть ошибка в EXT JS, связанная с копированием узлов дерева (EXTJS-13725). Вы должны изменить/отменить copy метод в Ext.data.NodeInterface:

// copy: function(newId, deep) { 
copy: function(newId, session, deep) { 
    var me = this, 
     result = me.callParent(arguments), 
     len = me.childNodes ? me.childNodes.length : 0, 
     i; 


    if (deep) { 
     for (i = 0; i < len; i++) { 
      // result.appendChild(me.childNodes[i].copy(undefined, true)); 
      result.appendChild(me.childNodes[i].copy(undefined, session, true)); 
     } 
    } 
    return result; 
} 

В основном в оригинальном коде нет сессии аргумент, в то время как должно быть.

1

Или установите copy:true

viewConfig: { 
     plugins: { 
      ptype: 'gridviewdragdrop', 
      enableDrag: true, 
      enableDrop: false, 
      ddGroup: 'selDD', 
      copy: true 
     },