遇到的问题
在使用Ext树形组件的时候,下层节点的刷新,总是需要下层节点全部搜索然后再展开,如果需要实时的从后台获取数据,改变某些节点的text或者icon时,就显得不够优雅了。
解决方案
负责树形组件TreePanle的TreeLoader是负责获取数据的,集成该类,然后在除第一次刷新之后的加载,将获取后的数据(比如节点的text、icon)更改到现有节点上,就可以很好的完成不收缩刷新
代码
/****************************************************
* goal:为了让树的节点内容更新(目前包括text iconCls)
* 而不让树形下层节点收缩带来的更好的用户体验
* disadvantage:不能增删节点
* createDate: 2009.09.24
* author: LXL
*****************************************************/
Ext.namespace('SMN.ux.TreeLoader');
SMN.ux.TreeLoader = function(config) {
config = config || {};
SMN.ux.TreeLoader.prototype.processResponse = function(response, node, callback){
var json = response.responseText;
try {
var o = response.responseData || Ext.util.JSON.decode(json);
node.beginUpdate();
var responseNodes = o;
var treeNodes = node.childNodes;
if (treeNodes.length == 0) {
// 第一次加载
for(var i = 0, len = responseNodes.length; i < len; i++){
var n = this.createNode(responseNodes[i]);
if(n){
node.appendChild(n);
}
}
} else {
// 以后加载
for (var i = 0; i < treeNodes.length; i++) {
var treeNode = treeNodes[i];
for (var j = 0; j < responseNodes.length; j++) {
var responseNode = responseNodes[j];
if (treeNode.attributes.id == responseNode.id) {
// 同一个节点
// 更新text
treeNode.setText(responseNode.text);
// 更新iconCls
treeNode.getUI().getIconEl().className = 'x-tree-node-icon' + ' ' + responseNode.iconCls;
}
}
}
}
node.endUpdate();
if(typeof callback == "function"){
callback(this, node);
}
}catch(e){
this.handleFailure(response);
}
};
SMN.ux.TreeLoader.prototype.load = function(node, callback){
// Ext.log('into Ext.ux.TreeLoader.prototype.load');
if(this.doPreload(node)){ // preloaded json children
if(typeof callback == "function"){
callback();
}
}else if(this.dataUrl||this.url){
this.requestData(node, callback);
}
};
SMN.ux.TreeLoader.superclass.constructor.call(this, config);
}
Ext.extend(SMN.ux.TreeLoader, Ext.tree.TreeLoader);
缺点和解决方案
当TreeLoader从后台获取的下层节点不再是目前的节点数量时,比如多了一个孩子节点或者少了一个孩子节点,以上代码是不能完成该功能的,所以可以增加if分支,从后台获取数据后,先比较下层孩子节点数据,遍历节点ID,将需要删除的孩子节点删除,多出来的孩子节点增加上,其他的更新text和icon。
注:本博客文章均已注明原创和转载,如转载本博客文章,需注明原文出处或征求原作者同意。
分享到:
相关推荐
完美的Extjs4 treePanel节点刷新,函数为自动刷新选中的节点.API看得头疼才别出来的代码.截止我发之前,好像没有谁共享这个功能的函数吧.
3. **TreeNode对象**:在`Ext JS`中,每个树节点都是一个`TreeNode`对象,它包含了节点的所有属性,如文本、图标、子节点等。对于复选框树,`TreeNode`还包含了复选框的状态信息。 4. **事件监听**:`TreePanel`...
- **Nodes**:树形结构中的每一个元素称为节点,可以包含子节点。 - **Leaf Nodes**:没有子节点的节点称为叶节点,通常代表树结构的终端。 3. **配置项详解** - **store**:用于存储树结构数据的Store对象,...
它可以包含多个节点(Node),每个节点又可以拥有子节点,形成一个树形结构。在实际应用中,经常需要对TreePanel中的节点进行操作,比如获取所有被选中的叶子节点的ID。 #### 2. 节点属性介绍 在TreePanel中,每个...
这个"带复选框的树"是指在TreePanel中每个节点都带有可选中的复选框,用户可以通过这些复选框来选择或操作树形结构中的数据。这种设计通常用于权限管理、目录选择、层级关系配置等场景,使得用户能够直观地对多级...
- `store`: 用于存储树节点数据的数据源。 - `root`: 树的根节点,通常设置为`{text: 'Root', expanded: true}`,表示初始展开状态。 - `displayField`: 显示节点文本的字段名。 - `foldersOnly`: 是否只显示有...
主要方法: collapseAll():收缩所有树节点 expandAll():展开所有树节点 getRootNode():获取根节点 getNodeById(String id):获取指定id的节点 expand( [Boolean deep], [Boolean anim],
2. 在`tree`的`data`属性中定义树形结构的数据,这些数据可以是JSON数组,其中每个对象表示一个树节点。 3. 配置`tree`的事件监听器,如`onLoadSuccess`、`onClick`等,以处理节点加载完成后的操作和用户的点击事件...
学习TreePanel时根据网上的资料自己实现的实例,结构如下: 1. 创建一棵树 ...11. 树形的拖放 12. 判断拖放目标 13. 树之间的拖放 14. 过滤器 15. 对树进行排序 16. 对树增加复选框 代码中有详尽的注释。
2. Ext JS 框架:这是一种富客户端开发框架,其 TreePanel 组件常用于实现树形视图,支持 TreeNode 和 AsyncTreeNode,后者用于动态加载树节点。 3. 动态生成树节点:两种策略,一次性生成所有节点和逐级加载,前者...
通过这种方式,可以实现更加灵活且高效的数据加载机制,使应用程序能够在不刷新整个页面的情况下更新树形菜单的内容。 #### 五、总结 本文详细介绍了如何使用ExtJs构建树形菜单,包括创建基础树形菜单、添加节点...
总结起来,EXT.NET TreePanel的Checkbox操作和父子节点联动是构建具有交互性树形结构的关键部分。通过正确的配置和事件处理,我们可以实现高效且用户友好的多选功能,而修正之前的Bug则确保了用户体验的一致性和正确...
`TreePanel`是Ext JS中的一个控件,它用于展示树形结构的数据。这种数据结构通常用于表示文件系统、组织架构或任何有层级关系的信息。`TreePanel`的主要特点包括: 1. **节点层次**:每个`TreePanel`都可以包含多个...
- **加载异步数据**:树节点的数据可以动态加载,当用户展开节点时,通过Ajax请求获取子节点数据。 - **自定义节点模板**:通过`viewConfig`中的`tpl`配置项,可以自定义节点的显示样式和内容。 7. **实际应用** ...
AsyncTreeNode允许我们通过AJAX技术从服务器获取数据并动态生成树节点。 #### 五、详细设计方案 1. **前端页面设计** - 文件一:`branchTree.html`,定义了树形控件的基本配置。 ```javascript Ext.onReady...
在Ext JS中,树形结构由`Ext.tree.Panel`组件实现,它可以展示可折叠的节点,支持展开、折叠、添加、删除等操作。 **树形结构的节点实现:** 在Ext JS中,每个树形结构的节点都是一个`Ext.data.TreeNode`对象。节点...
在前端开发中,数据可视化是不可或缺的一部分,而树形结构作为一种常见的数据展现方式,被广泛应用于文件系统、组织架构、导航菜单等场景。EasyUI 和 ExtJS 都提供了强大的组件库来帮助开发者构建动态树形结构。这两...
- TreePanel是用来展示树形结构数据的组件,它可以显示节点的层次关系,并支持展开、折叠、拖放等交互操作。 - TreePanel的基础是`TreeStore`,它负责加载和管理树形数据。数据通常以JSON格式提供,包含节点ID、父...
TreePanel提供了一种交互式的树形视图,用户可以通过展开、折叠节点来查看和操作数据。 在Ext JS中,TreePanel是基于Ext.grid.Panel扩展的,它包含了树形数据的渲染和操作功能。TreePanel可以与Ext.data.TreeStore...
首先,EXT的TreePanel是实现树形菜单的基础组件。TreePanel提供了一种灵活的方式来展示层次结构的数据,并且支持各种交互操作,如展开/折叠节点、选择节点等。在EXT中,树形菜单的数据通常通过JSON格式从服务器获取...