2014-11-05 39 views
1

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

如果我尝试在“beforedrop”听众深克隆时,出现以下错误: Ext.data.Model.constructor():坏模型构造函数的参数2 - “会话”是不是一个会话

该视图有一个viewcontroller,但没有视图模型。鉴于

树定义:

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 
     },