我有一个具有这种结构的对象
首先 最后的 uid ID 关系[]
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/