手动/动态地将数据加载到树形面板中?

Posted

技术标签:

【中文标题】手动/动态地将数据加载到树形面板中?【英文标题】:Manually/dynamically load data into a treepanel? 【发布时间】:2013-03-08 22:08:31 【问题描述】:

在 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);

【问题讨论】:

坦率地说,在 extjs4 中这看起来完全不同。我只是不确定你需要多少坚持上面的代码。但简而言之:NodeInterface 用于装饰属于TreeStore 的模型实例。一般来说,你永远不应该使用这个类。有没有办法只将代码迁移到正确的 extjs4 样式? @lzhaki 查看我的更新 【参考方案1】:

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

    把树面板变成一个类

每次数据变化时:

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

不是“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);   

【讨论】:

以上是关于手动/动态地将数据加载到树形面板中?的主要内容,如果未能解决你的问题,请参考以下文章

Extjs4.2.1 - 将 json 加载到树形面板失败

javascript实现动态加载树形菜单(tree),

zTree 树形控件 ajax动态加载数据

Extjs 4 treepanel 重新加载和展开

java如何实现二级树形菜单动态显示。要求加载页面时显示一级,点击一级菜单再去数据库查找出二级菜单

如何在 Sencha 中动态加载轮播项目