gpt4 book ai didi

extjs - 分机 JS 4 : Setting a different root node for a TreeStore

转载 作者:行者123 更新时间:2023-12-04 23:46:59 25 4
gpt4 key购买 nike

我正在尝试在 Ext JS 4.0.7 的 TreeStore 中设置不同的根节点,但我似乎无法正确地做到这一点...我不知道这是不是框架中的另一个错误,或者是否我只是错误地使用了这些功能,所以我正在寻求帮助。这是我正在使用的代码。

创建一个空白节点以供稍后使用

var node = {
id: 'root',
text: 'root',
expanded: true,
children: [{
id: 'child1',
text: 'child1',
leaf: true
},{
id: 'child2',
text: 'child2',
leaf: true
}]
};

商店

var store = Ext.create('Ext.data.TreeStore', {
storeId: 'treestore',
proxy: {
type: 'memory',
reader: {
type: 'json'
}
},
snapshot: node,
root: {
id: 'root',
text: 'root',
expanded: true,
children: [{
id: 'dummy1',
text: 'dummy1',
leaf: true
},{
id: 'dummy2',
text: 'dummy2',
leaf: true
}]
}
});

树面板

Ext.create('Ext.tree.Panel', {
store: store,
renderTo: Ext.getBody(),
height: 600,
width: 600,
id: 'mytree',
tbar: [{
xtype: 'button',
text: 'set child1 as root',
handler: function() {
var store = Ext.getCmp('mytree').store;
store.setRootNode(store.snapshot);
alert(store.getNodeById('child1').data.id); // alerts child1
}
},{
xtype: 'button',
text: 'set dummy1 as root',
handler: function() {
var store = Ext.getCmp('mytree').store;
store.setRootNode(store.snapshot2.copy(null, true));
alert(store.getNodeById('dummy1')); // alerts undefined
}
},{
xtype: 'button',
text: 'set dummy1 with diff copy',
handler: function() {
var store = Ext.getCmp('mytree').store;
store.getRootNode().removeAll();
store.snapshot2.eachChild(function(rec) {
store.getRootNode().appendChild(rec.copy(null, true));
});
alert(store.getNodeById('dummy1').data.id); // alerts dummy1
}
}]
});

将snapshot2设置为store的当前根节点

Ext.getCmp('mytree').store.snapshot2 = Ext.getCmp('mytree').store.getRootNode().copy(null, true);

因此,当您单击第一个按钮时,您会在警报中获得正确的值(“child1”)。但是,当您单击第二个按钮(“将 dummy1 设置为 root”)时,您会在警报中得到未定义。第三个按钮为您提供正确的输出('dummy1'),并手动将每个 child 深度复制到根。

对我来说,复制函数或 setRootNode 函数似乎没有正确执行某些操作(更倾向于前者)。如果我用 copy(null, true) 指定深拷贝,那么应该进行深拷贝,一切都应该没问题……但我意识到拷贝函数有问题从一开始(参见 thread )。这就是为什么我认为它可能与 setRootNode 一起使用,但如果 setRootNode 适用于我创建的节点但不适用于深度复制的原始根节点,那将没有意义。

任何人都可以提供关于我做错了什么的任何见解吗?我将不胜感激任何帮助。谢谢!

最佳答案

关于extjs - 分机 JS 4 : Setting a different root node for a TreeStore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9779206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com