gpt4 book ai didi

javascript - 如何用递归对象 extjs 填充商店?

转载 作者:行者123 更新时间:2023-11-29 10:45:28 24 4
gpt4 key购买 nike

我有一个具有这种结构的对象

首先最后的uidID关系[]

Rels 是一个数组,再次包含具有相同结构的对象。我如何管理此对象以在负载中使用 extjs 填充 treeStore?我需要维护父子之间的层次结构

例子

parent
child 1
child 2
侄子 1
侄子 2

等等。它们都在父节点下。

有什么建议吗?我尝试了几种使用递归函数但没有结果的方法。

这是我的代码(不工作)

Ext.define('utenti', {

extend: 'Ext.data.Model',
fields: [{
name: 'F',
type: 'string'
},
{
name: 'L',
type: 'string'
},
{
name: 'Uid',
type: 'string'
},
{
name: 'Id',
type: 'string'
}
]
});

var TreeUserStore = Ext.create('Ext.data.TreeStore', {
model: 'utenti',
root: {
text: 'Root',
//id: 'Radice_utenti',
expanded: true
},
listeners: {

load: function eachRecursive(ResObj) {
var childNode;
if (ResObj.Rels.length > 0) {
for (i = 0; i < data.Rels.length; i++) {
eachRecursive(ResObj.Rels[i]);

}
} else {
childNode = Ext.create('utenti', {
F: ResObj.F,
L: ResObj.L,
Uid: ResObj.Uid,
Id: ResObj.Id
});
TreeUserStore.appendChild(child);
}
}
}


});

我找到了从对象中提取数据的函数

function eachRecursive(ResObj, parent) {

if (ResObj.Rels.length > 0) {

var childNodeModel = {
name: ResObj.F + " " + ResObj.L,
text: ResObj.F + " " + ResObj.L,
leaf: false,
children: []
};

alert("padre:" + parent.name + ", figlio:" + childNodeModel.name);
parent.children.push(childNodeModel);

for (var i = 0; i < ResObj.Rels.length; i++) {
eachRecursive(ResObj.Rels[i], childNodeModel);
}
} else {
var childNodeModel = {
name: ResObj.F + " " + ResObj.L,
text: ResObj.F + " " + ResObj.L,
leaf: true
};
alert("padre:" + parent.name + ", figlio:" + childNodeModel.name);
parent.children.push(childNodeModel);

}

}

但目前我无法在 TreePanel 中显示元素。我尝试使用 appendChild 但没有任何结果,我也尝试创建 TreeNode 但它给我和 错误 例如 object is not a function

我该怎么办?

提前致谢

最佳答案

您应该使用 appendChild 节点的方法将子节点添加到层次结构中。

你的递归函数应该是这样的:

function eachRecursive(ResObj, parent) {

if (ResObj.Rels.length > 0) {

var childNodeModel = {
name: ResObj.F + " " + ResObj.L,
text: ResObj.F + " " + ResObj.L,
leaf: false,
children: []
};

var childNode = parent.appendChild(childNodeModel);

for (var i = 0; i < ResObj.Rels.length; i++) {
eachRecursive(ResObj.Rels[i], childNode);
}
} else {
var childNodeModel = {
name: ResObj.F + " " + ResObj.L,
text: ResObj.F + " " + ResObj.L,
leaf: true
};
parent.appendChild(childNodeModel);

}
}

然后您开始从根目录填充商店:

eachRecursive(data, TreeUserStore.getRootNode());

关于javascript - 如何用递归对象 extjs 填充商店?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20470077/

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