Глубокая копия перетаскивания дерева ExtJS5

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

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

Представление имеет контроллер представления, но не имеет модели представления.

Определение дерева в поле зрения:

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.

Любая помощь приветствуется!


person kingo999    schedule 05.11.2014    source источник


Ответы (2)


Насколько я знаю, в 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;
}

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

person Krzysztof    schedule 21.11.2014

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

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