1

在 ExtJs3 中,我的团队执行以下操作将数据加载到树存储中。在 ExtJS4 中执行此操作的等效方法是什么?当我使用 NodeInterface 执行类似代码时,我收到“无法读取 null 的属性 '0'”错误。

Ext.Ajax.request({
            url: servlet,
            success: function(response, opts)
            {
                var jsonData = Ext.decode(response.responseText);

                var root = new Ext.tree.AsyncTreeNode({
                    text: 'Root test',
                    draggable: false,
                    id: 'root',
                    children: jsonData.tree.data
                });
                tree.setRootNode(root);
//...

更新:我真的不在乎如何完成这项工作。我只有两个要求:(1)使用单个服务器请求来获取不相关的数据。(2) 针对不同的数据重用树形面板和网格面板

我已经能够将数据加载到动态创建的树形面板中。但是,使用 setRootNode() 不适用于现有的树面板。

//this works
var tree = Ext.create('Ext.tree.Panel', {
          root: {
                text:'Application',
                expanded:true,
                children: jsonResponse.categoryTree.data
          }
        });

//this doesn't work
existingTree.setRootNode(root);
4

1 回答 1

0

到目前为止,“足够好”的解决方案是

  1. 将树面板变成一个类

每次数据变化:

  1. 删除树面板的前一个实例(如果有)
  2. 实例化一个新的树面板

不是“Ext JS 4”的方式,但它完成了工作。除非有人能用正确的做事方式启发我,否则我将其标记为答案。

                var panel = Ext.ComponentQuery.query('panel#categorysearch')[0];

                //destroy the tree panel
                panel.remove('categorysearchtree', true);

                //create a new one
                var tree = Ext.create('MyApp.view.CategorySearchTreePanel', {
                    root: {
                        text:'Services', 
                        expanded:true,
                        children: jsonResponse.categoryTree.data
                    }
                });

                panel.add(tree);   
于 2013-03-11T15:11:27.167 回答