昨天为了项目需要在做异步加载树时,碰到一个每次点击节点都重新,而且要把数据共享给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);//自定义的动态加载节点
}
}
});
分享到:
相关推荐
当树Panel初始化完成后,我们可以通过DWR调用服务器端的方法,将返回的JSON数据传递给TreePanel的`loadData`方法,或者在TreePanel的`loader`配置中指定的回调函数内处理数据,然后使用`expandNode`或`refresh`方法...
在本文中,我们将深入探讨如何使用Ext JS的Tree Panel与JSON数据进行动态加载,并实现多选和单选功能。Ext JS是一种强大的JavaScript库,用于构建富客户端应用,而Tree Panel则是展示层次结构数据的一种组件。在后台...
虽然现在有更新的版本(如Ext JS 7.x),但学习旧版本有助于理解框架的发展历程,同时许多核心概念在新版本中依然适用。因此,对于那些正在维护基于Ext.js 3.0项目的人来说,这些资源尤为宝贵。
在EXTJS 4中,`Ext.tree.TreePanel`被重命名为`Ext.tree.Panel`,并且不再直接继承自`Ext.Panel`,而是继承自`Ext.grid.Panel`,因为树形组件现在使用表格视图(View)来展示数据。此外,节点的存储结构从`TreeNode`...
var treePanel = Ext.create('Ext.tree.Panel', { title: 'Tree Demo', width: 300, height: 300, store: treeStore, // 这里需要定义store来连接数据 rootVisible: true, renderTo: Ext.getBody() }); ```...
这个例子展示了如何创建一个简单的树,其数据从'tree_data.json'文件动态加载。实际应用中,你需要根据项目需求调整数据源和样式。 总结一下,ExtJS Tree是一个强大且灵活的组件,它提供了丰富的功能和良好的用户...
Ext Tree Panel(简称Tree Panel)是Ext JS中的一个视图组件,用于展示层次化的数据结构,通常用于文件系统、组织结构等场景。它允许用户展开和折叠节点,进行多级导航。 2. **基本配置** 创建一个Tree Panel...
例如,`Ext.my`文件夹可能包含不同控件的示例,比如使用`Ext.grid.Panel`创建数据网格,用`Ext.form.BasicForm`构建表单,或使用`Ext.tree.TreePanel`展示层次结构数据。 2. **前后台数据交互**:EXTJS支持AJAX技术...
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 验证...
通过toolbar来放置按钮),包括左侧动态菜单实现(采用Ext.tree.Panel)动态从数据库加载数据来显示菜单(后台代码也在了通过json进行数据传输),内容区域采用tab页得形式来显示,点击左侧菜单右侧动态创建tab页。...
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 验证...
Ext.create('Ext.tree.Panel', { title: 'Tree with Structs', store: { type: 'ajax', url: 'loadTree', // 调用后台Servlet root: { // 根节点配置 text: 'Root', expanded: true }, fields: ['id', '...
报表页面应使用`Ext.grid.Panel`或`Ext.tree.Panel`展示数据,结合`Ext.data.Store`和`Ext.data.Model`进行数据处理。利用`Ext.toolbar.Toolbar`添加操作按钮。 4.3、功能性页面 功能性页面可能包含表单、对话框...
3. **动态加载树叶子节点(Tree Leafs)**:对于大型数据树,可以只在用户展开节点时请求子节点数据。`Ext.tree.TreePanel`的`load`事件和`store`的`loadData`方法可用于实现这一功能。 **后台Servlet模拟JSON数据*...
var treePanel = Ext.create('Ext.tree.Panel', { title: 'Tree Example', width: 200, store: treeStore, rootVisible: false, renderTo: Ext.getBody() }); ``` 在上述代码中,我们创建了一个TreeStore,并...
var treePanel = Ext.create('Ext.tree.Panel', { store: treeStore, width: 200, renderTo: Ext.getBody() }); var comboBox = Ext.create('Ext.form.field.ComboBox', { fieldLabel: '选择项', displayField...
- 在实际应用中,可能还需要实现节点的展开/折叠、拖放操作、右键菜单、节点点击事件等功能。EXTJS提供了丰富的API和事件处理机制来支持这些高级特性。 6. **示例代码**: - 实例代码会包含创建TreePanel,配置...
EXT框架是一种基于JavaScript的开源Ajax框架,主要用于构建具有丰富用户界面的...对于新手来说,从阅读EXT的API文档、研究示例程序和实践简单的HelloWorld开始,逐步深入理解EXT的组件和API,是掌握EXT框架的有效途径。
4. 树形插件:`Ext.tree.plugin.TreeDragDrop`允许在树形结构中进行拖放操作,实现节点的移动和排序。 5. 动画插件:如`Ext.fx.Anim`,为组件添加动画效果,提升用户体验。 三、如何使用ExtJS 插件 1. 引入插件:在...