1

我正在尝试使用 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 存储对象中具有所需的层次结构。我真的遇到了这个问题,但是对每棵树进行不同的查询对我来说是完全不可接受的。如果有人能指出我的解决方案,我会很高兴。谢谢。

4

0 回答 0