`

Ext.tree.panel中如何每次点击展开都从后台加载

阅读更多

昨天为了项目需要在做异步加载树时,碰到一个每次点击节点都重新,而且要把数据共享给Grid。有过一些想法,可是步骤都太多,而且感觉代码太乱。所以就想去看看Ext代码是如何实现树的加载和异步加载树是如何生成的。

看了一下发现,在Ext.tree.AsyncTreeNode中有一个属性叫loaded。

Ext.tree.AsyncTreeNode就是通过这个标识位来识别该节点是否已经加载。如果loaded为true时,即为已经加载过,而以后点击,则节点展开时不再从后台加载。所以我们只要实现在节点收起时把这个loader=false;就可以实现我们所需要的功能。

于是我自定义了一个Ext.ui.EproAsyncTreeNode,重写collapse方法,

Ext.ui.EproAsyncTreeNode = Ext.extend(Ext.tree.AsyncTreeNode, {


   collapse : function(deep, anim) {
    this.loaded = false;
    Ext.ui.EproAsyncTreeNode.superclass.collapse.call(this, deep,
      anim);
   }
  });

这样后,我又试了一下,又出现了一个问题,就是只有根节点才实现这样功能,而其它的节点都没有该功能。又花了点时间,还是没有发现什么不同。最后想到Ext.tree.TreePanel是如何动态生成节点,一看,果然还有一个重要的地方没有改。Ext.tree.TreePanel生成节点的方法createNode一直还是使用了默认的Ext.tree.AsyncTreeNode。于是就修改这里,再次测试,果然达到我们想要的结果。

Ext.namespace("Ext.ui");
Ext.ui.EproTreeLoader = Ext.extend(Ext.tree.TreeLoader,{
    createNode : function(attr){
        // apply baseAttrs, nice idea Corey!
        if(this.baseAttrs){
            Ext.applyIf(attr, this.baseAttrs);
        }
        if(this.applyLoader !== false){
            attr.loader = this;
        }
        if(typeof attr.uiProvider == 'string'){
           attr.uiProvider = this.uiProviders[attr.uiProvider] || eval(attr.uiProvider);
        }
        if(attr.nodeType){
            return new Ext.tree.TreePanel.nodeTypes[attr.nodeType](attr);
        }else{
            return attr.leaf ?
                        new Ext.tree.TreeNode(attr) :
                        new Ext.ui.EproAsyncTreeNode(attr);//自定义的动态加载节点
        }
    }
});

0
1
分享到:
评论
3 楼 lyndon.lin 2011-08-09  
不需要,这样就OK
2 楼 lyndon.lin 2011-07-07  
不只是把loaded设置为false就行了,下面的代码也需要。
1 楼 chenzhiqiangit 2011-07-04  
同样问题
根据你的意思,我都把loader设置成false,可以还不行。貌似官方例子没有这个问题啊

相关推荐

    DWR方式动态加载EXT.Tree

    当树Panel初始化完成后,我们可以通过DWR调用服务器端的方法,将返回的JSON数据传递给TreePanel的`loadData`方法,或者在TreePanel的`loader`配置中指定的回调函数内处理数据,然后使用`expandNode`或`refresh`方法...

    Ext tree json 动态加载完美实例

    在本文中,我们将深入探讨如何使用Ext JS的Tree Panel与JSON数据进行动态加载,并实现多选和单选功能。Ext JS是一种强大的JavaScript库,用于构建富客户端应用,而Tree Panel则是展示层次结构数据的一种组件。在后台...

    Ext.js教程和Ext.js API

    虽然现在有更新的版本(如Ext JS 7.x),但学习旧版本有助于理解框架的发展历程,同时许多核心概念在新版本中依然适用。因此,对于那些正在维护基于Ext.js 3.0项目的人来说,这些资源尤为宝贵。

    exxtjs4.0中树的用法

    在EXTJS 4中,`Ext.tree.TreePanel`被重命名为`Ext.tree.Panel`,并且不再直接继承自`Ext.Panel`,而是继承自`Ext.grid.Panel`,因为树形组件现在使用表格视图(View)来展示数据。此外,节点的存储结构从`TreeNode`...

    在VS下利用Ext4.2的TreePanel的简单demo

    var treePanel = Ext.create('Ext.tree.Panel', { title: 'Tree Demo', width: 300, height: 300, store: treeStore, // 这里需要定义store来连接数据 rootVisible: true, renderTo: Ext.getBody() }); ```...

    extjs tree

    这个例子展示了如何创建一个简单的树,其数据从'tree_data.json'文件动态加载。实际应用中,你需要根据项目需求调整数据源和样式。 总结一下,ExtJS Tree是一个强大且灵活的组件,它提供了丰富的功能和良好的用户...

    treepanel实例

    Ext Tree Panel(简称Tree Panel)是Ext JS中的一个视图组件,用于展示层次化的数据结构,通常用于文件系统、组织结构等场景。它允许用户展开和折叠节点,进行多级导航。 2. **基本配置** 创建一个Tree Panel...

    多年积攒下来的EXT3.3例子大放送

    例如,`Ext.my`文件夹可能包含不同控件的示例,比如使用`Ext.grid.Panel`创建数据网格,用`Ext.form.BasicForm`构建表单,或使用`Ext.tree.TreePanel`展示层次结构数据。 2. **前后台数据交互**:EXTJS支持AJAX技术...

    精通JS脚本之ExtJS框架.part1.rar

    9.2.2 从后台脚本获得分页数据 9.2.3 在表格顶部显示分页工具条 9.2.4 实现前台分页效果 9.3 可编辑表格控件——EditorGrid 9.3.1 制作第一个EditorGrid 9.3.2 添加一行数据 9.3.3 保存修改结果 9.3.4 验证...

    extjs4.0 实现了主页面框架 动态菜单 例子 表单 ajax

    通过toolbar来放置按钮),包括左侧动态菜单实现(采用Ext.tree.Panel)动态从数据库加载数据来显示菜单(后台代码也在了通过json进行数据传输),内容区域采用tab页得形式来显示,点击左侧菜单右侧动态创建tab页。...

    精通JS脚本之ExtJS框架.part2.rar

    9.2.2 从后台脚本获得分页数据 9.2.3 在表格顶部显示分页工具条 9.2.4 实现前台分页效果 9.3 可编辑表格控件——EditorGrid 9.3.1 制作第一个EditorGrid 9.3.2 添加一行数据 9.3.3 保存修改结果 9.3.4 验证...

    tree/ext/struct 的一切部署

    Ext.create('Ext.tree.Panel', { title: 'Tree with Structs', store: { type: 'ajax', url: 'loadTree', // 调用后台Servlet root: { // 根节点配置 text: 'Root', expanded: true }, fields: ['id', '...

    Extjs规范(自己的)

    报表页面应使用`Ext.grid.Panel`或`Ext.tree.Panel`展示数据,结合`Ext.data.Store`和`Ext.data.Model`进行数据处理。利用`Ext.toolbar.Toolbar`添加操作按钮。 4.3、功能性页面 功能性页面可能包含表单、对话框...

    Extjs4.0+MVC模式+存动态加载

    3. **动态加载树叶子节点(Tree Leafs)**:对于大型数据树,可以只在用户展开节点时请求子节点数据。`Ext.tree.TreePanel`的`load`事件和`store`的`loadData`方法可用于实现这一功能。 **后台Servlet模拟JSON数据*...

    extjs tree示例

    var treePanel = Ext.create('Ext.tree.Panel', { title: 'Tree Example', width: 200, store: treeStore, rootVisible: false, renderTo: Ext.getBody() }); ``` 在上述代码中,我们创建了一个TreeStore,并...

    ExtJS下拉列表树控件

    var treePanel = Ext.create('Ext.tree.Panel', { store: treeStore, width: 200, renderTo: Ext.getBody() }); var comboBox = Ext.create('Ext.form.field.ComboBox', { fieldLabel: '选择项', displayField...

    ext导步树完整实例

    - 在实际应用中,可能还需要实现节点的展开/折叠、拖放操作、右键菜单、节点点击事件等功能。EXTJS提供了丰富的API和事件处理机制来支持这些高级特性。 6. **示例代码**: - 实例代码会包含创建TreePanel,配置...

    Ext框架简介.ppt

    EXT框架是一种基于JavaScript的开源Ajax框架,主要用于构建具有丰富用户界面的...对于新手来说,从阅读EXT的API文档、研究示例程序和实践简单的HelloWorld开始,逐步深入理解EXT的组件和API,是掌握EXT框架的有效途径。

    Extjs相关插件

    4. 树形插件:`Ext.tree.plugin.TreeDragDrop`允许在树形结构中进行拖放操作,实现节点的移动和排序。 5. 动画插件:如`Ext.fx.Anim`,为组件添加动画效果,提升用户体验。 三、如何使用ExtJS 插件 1. 引入插件:在...

Global site tag (gtag.js) - Google Analytics