我正在尝试使用 ExtJs 4 构建 TreeGrid。我有一个 servlet,它返回给我大对象,我想将此 JSON 数据划分为单独的树并将它们显示在不同的 Ext.Tree.Panel 上。我不想对服务器端进行多个查询来获取每棵树的数据,因为从逻辑上讲它是一个对象。对象看起来像这样。
root : {
...
some_meta_data_fields here..
..
tree1 :{
a : {
data:..
children: [..]
},
b : {
data:..
children: [..]
}
...more childs here...
},
tree2 : {
..another tree...
}
}
因此,tree1 用于一个 Tree.Panel,而 tree2 用于另一个,并且与服务器的所有同步都应该集中。
我从 Ext.Ajax(..) 之类的服务器获取数据,并使用不同的根参数创建了不同的 Tree.Store,例如:
var store = Ext.create('Ext.data.TreeStore', {
model: 'model',
root : root.tree1,
proxy : {
type: 'memory',
....JSON reader and other.
}
}
});
但是当这样的存储加载是转换原始对象(例如分离叶子)时,这是不可接受的。我想我应该像这样手动填充树存储:
var store = Ext.create('Ext.data.TreeStore', {
root : {name: "proxyRoot"},
model: 'model',
load : function(node){
var that = this;
Ext.each(a.children, function(child, index) {
var node = that.getRootNode().appendChild({
name : child.name,
val : child.val
});
Ext.each(node.children, function(leaf, index) {
node.appendChild({
name : leaf.name,
val : leaf.val
});
})
});
console.log(that);
}
});
树加载后,它仅显示无法扩展的根,但在控制台中我可以看到数据已正确加载,并且我在 ExtJs 存储对象中具有所需的层次结构。我真的遇到了这个问题,但是对每棵树进行不同的查询对我来说是完全不可接受的。如果有人能指出我的解决方案,我会很高兴。谢谢。