ExtJS5树拖拽深拷贝

时间:2014-11-05 10:31:26

标签: tree extjs5

在ExtJS5中,我有一个启用了拖放的TreePanel。 当我将带有子项的节点从源树拖到目标树时,只复制父节点。

如果我在'beforedrop'侦听器中尝试深度克隆,则会因以下错误而失败: Ext.data.Model.constructor():错误模型构造函数参数2 - “会话”不是会话

视图有一个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场景中定义的会话。 复制功能是否需要定义viewmodel会话? 有没有办法解决。 ExtJS5中是否有错误。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分: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 :(得分:1)

或设置copy:true

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