在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中是否有错误。
非常感谢任何帮助!
答案 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
},