对于Extjs学习者来说,treepanel的运用是必不可少的,treepanel主要就包括store层和view层,注意store层是Ext.data.TreeStore,与我们常用的Ext.data.Store是属于并列关系,同继承于Ext.data.AbstractStore,因此tree节点都有默认的model,包括allowDrag,allowDrop,checked,cls,depth,expandable,expanded,href,
hrefTarget,icon,iconCls,id,index,isFirst,isLast,leaf,loaded,loading,parentId,qtip,
qtitle,root,text 这些基本字段基本含义名称上已经说的很清楚了,这里不再详述,另外特别需要注意的是,当创建一个新的tree节点的时候,可以通过该节点的parentNode调用appendChild方法,如
var that = this;
Ext.MessageBox.prompt('新建目录', '请输入目录名称:', function(btn, text) {
if(btn == "ok") {
var guid = that.getGUID("CatalogServlet", text, nodeId);
var parentNode = tree.getStore().getNodeById(nodeId);
var childNode = {
id : guid,
text : text,
url : 'subHTML/CatalogInfo/catalogInfo.html',
leaf : false,
children : []
};
parentNode.appendChild(childNode);
parentNode.expand();
}
});
注意看添加节点中可以额外添加新的字段,而且如果要添加一个空的文件夹形式,一定要加上children:[],定义这个字段防止展开该节点的时候会报错,要不整棵树结构就会混乱,treeNode的leaf字段默认是false。
好了,上面讲了一些小细节问题,下面步入正题。
treepanel首先要定义treestore。先贴代码。。。。
Ext.define('AM.store.eduStoreTree', {
extend : 'Ext.data.TreeStore',
// defaultRootId : 'root',
proxy : {
type : 'ajax',
url : 'CatalogServlet',
extraParams : {
cmd : 'findRoots'
},
reader : {
type : 'json'
}
},
listeners : {
'beforeexpand' : function(parentNode, eOpts) {
var guid = parentNode.data.id;
Ext.Ajax.request({
url : 'CatalogServlet',
params : {
guid : guid,
cmd : 'getAll'
},
success : function(response) {
parentNode.removeAll(true);
eval("var childNodes = " + response.responseText);
Ext.each(childNodes, function(node) {
if(node == null) {
return;
}
parentNode.appendChild(node);
});
}
});
}
},
autoLoad : true
});
treestore主要就定义proxy来异步加载数据,proxy中定义url来指定访问服务器路径,有extraParams来添加额外参数,若服务器返回的json字段名与上面列举的model中字段名一致,则自动赋值上去。其实是treeNode中定义了一个属性raw,服务器中传来的json对象全都存储在raw中,所以也可以通过raw属性取值。
上面代码取的只是树单层的数据,也可以一次性把数据全部都取出来,这样必须在返回给客户端的数据中每个父节点都添加一个字段属性children,其中填放子节点。转换成json形如:
{'children':[{'children':[{'children':[{'children':[],'id':0111,'leaf':true,'text':'万俟辉夜1','url':'#'}],'id':011,'leaf':false,'text':'万俟辉夜2','url':''}
也可以通过异步加载,看代码listeners定义了一个beforeexpand事件监听,当点击展开树节点时,会重新像服务器发送ajax请求数据,这样避免了去大量数据的耗时等待。
最后就是tree的view层代码编写了,照例先贴代码:
Ext.define('AM.view.eduTree',{
extend : 'Ext.tree.Panel',
alias :'widget.edutree',
rootVisible : false,
store : 'eduStoreTree',
frame : true,
animate : true
/* viewConfig : {
plugins :
{
ptype : 'treeviewdragdrop',
appendOnly : true
},
listeners : {
beforedrop : function(node, data, overModel, dropPosition, dropFunction, eOpts) {
},
drop : function(node, data, overModel, dropPosition, eOpts ) {
// alert("把:" + data.records[0].get('text') + "移动到:" + overModel.get('text'));
Ext.Ajax.request({
url: 'CatalogServlet',
params: {
cmd : 'test',
guid : data.records[0].get('id'),
catalogParent : overModel.get('id')
},
method : 'GET',
success: function(response){
}
});
}
}
}*/
});
tree中只需要定义之前写好的store就行了,其他的属性都比较好说,大家可以在官网api中查到,上面的说明都比较详细,也可以锻炼大家浏览英文文档的能力。frame和animate都是美观树的样式和行为。一般都可以加上去。另外,extjs4中提供了tree的拖拽功能,如上代码中在viewconfig中定义treeviewdragdrop,然后就可以监听beforedrop和drop事件, 例子上写的还比较详细。
tree节点的监听:
'[id=edu-tree]' : {
'itemclick' : function(view,record){
this.TreeDoActionUtil.doClick(view,record);
},
'itemcontextmenu' : function(view, record, item, index, e, eOpts ) {
this.TreeDoActionUtil.doItemcontextmenu(view, record, item, index, e, eOpts);
}
},
上面是mvc结构写的,大家可以直接在tree的view层直接定义listeners,然后里面监听的代码一样。注意监听的名称与extjs3不同,另外右键监听的时候要阻止浏览器默认的右键监听,需加上
e.preventDefault();
e.stopEvent(); //屏蔽浏览器默认的右击事件
最后,介绍几个treeNode几个比较常用的函数。
添加子节点:appendChild(object)
删除节点:appendChild(boolean) 默认为false
查询节点:getChildAt( Number)
展开节点:expand( [Boolean recursive], [Function callback], [Object scope] )
最后的最后,本文如果写的有什么不足,希望大家与我交流,共同学习,共同进步。。。。。。。。。
由于写博客发截图比较麻烦,不过应一楼要求还是发一张吧。。
分享到:
相关推荐
完美的Extjs4 treePanel节点刷新,函数为自动刷新选中的节点.API看得头疼才别出来的代码.截止我发之前,好像没有谁共享这个功能的函数吧.
用ExtJS4实现的treepanel与gridpanel的简单互动案例 包含mvc开发模式与普通开发模式两种 普通开发模式:需要在引入js文件夹中的main.js文件 mvc开发模式:需要引入app文件夹中的app.js文件 适合初学extjs4的朋友
在"Extjs 做的treepanel+tab切换页"这个项目中,我们主要关注的是如何利用ExtJS 3.2版本来创建一个具备折叠面板(Collapsible Panel)功能的树形视图(TreePanel),以及与之联动的选项卡(TabPanel)。这个设计允许...
在本篇文章中,我们将深入探讨如何在ExtJS框架中获取TreePanel中所有被选中(checked)的叶子节点的ID。此技术对于处理复杂的数据结构、优化用户交互体验以及实现高效的数据管理至关重要。 ### 一、ExtJS简介 ...
学习TreePanel时根据网上的资料自己实现的实例,结构如下: 1. 创建一棵树 2. 使用TreeLoader加载数据生成树 3. 读取本地Json数据生成树 4. 使用Servlet提供数据 5. 树的事件 6. 右键菜单 7. 修改节点的默认图标 8. ...
主要方法: collapseAll():收缩所有树节点 expandAll():展开所有树节点 getRootNode():获取根节点 getNodeById(String id):获取指定id的节点 expand( [Boolean deep], [Boolean anim],
在本文中,我们将探讨ExtJS 4框架中的TreePanel组件如何动态地改变行高。TreePanel是ExtJS中用于展示树形结构数据的组件,它通常用于显示文件系统结构、组织架构等层次化数据。动态改变行高是提高用户界面友好性和...
TreePanel是ExtJS中的一个树形控件,它允许你展示层级结构的数据。在教程中,你可能会学到如何创建和配置TreePanel,包括加载数据、设置节点图标、处理节点的展开和折叠事件,以及添加拖放功能。TreePanel通常用于...
TreePanel继承自Panel,在ExtJS中使用树控件含有丰富的属性和方法实现复杂的功能。其中Ext.tree.TreeNode代表一个树节点,比较常用的属性包括text、id、icon、checked等、异步树Ext.tree.AsyncTreeNode、树加载器Ext...
根据提供的文件信息,我们可以深入探讨如何在ExtJS4框架中使用MVC2模式下的TreePanel组件结合动态JSON数据实现树形结构的展示与交互。以下将详细解释代码中涉及的关键概念和技术要点: ### 1. 创建TreeStore实例 ...
4. **数据源同步**:如果你的数据源(如Store)在后台进行了更新,但是TreePanel没有重新加载,那么选中状态的改变可能不会反映到界面上。确保在数据源更新后,调用了`store.load()`来刷新TreePanel。 5. **渲染...
而在 ExtJS4 中,我们需要使用以下代码来创建一个 TreePanel: ```javascript var ptree = Ext.create('Ext.data.TreeStore', { // ... }); ``` 可以看到,ExtJS4 使用 Ext.create 函数来创建组件类,这样可以...
在EXTJS这个强大的JavaScript框架中,`Ext.Panel`和`TreePanel`是两个非常重要的组件,它们被广泛用于构建复杂的用户界面。这篇文章将探讨如何在这些组件中动态加载本地页面数据,以提升用户体验并实现灵活的数据...
在EXTJS4中,Panel和TreePanel是两个非常重要的组件,它们在构建用户界面时扮演着核心角色。本文将深入探讨Panel的accordion布局以及TreePanel的动态导航功能,帮助开发者更好地理解和运用这些特性。 首先,让我们...
《无废话ExtJs系列教程十五:树:TreePanel》 ExtJs是一个强大的JavaScript库,用于构建富客户端Web应用。在本教程中,我们将深入探讨一个重要的组件——TreePanel,它是ExtJs用来展示层次结构数据的工具,常用于...
EXTJS中的TreePanel是用于展示层级数据的组件,它以树状结构呈现数据。TreePanel提供了丰富的配置项和方法,使得我们可以灵活地控制树的显示和交互。以下是对TreePanel及其主要配置项和方法的详细说明: 1. **主要...
Extjs4 TreePanel实例 ExtJs4 动态加载 Extjs4 带复选框的树(Checkbox tree) Extjs4 新的布局方式 Extjs4 锁定表头(Locking Grid)功能 Extjs4.0 MVC实例 Extjs4.0动态填充combobox数据 Extjs4中up()和down()的用法...
ComboBoxTree是ExtJS4中的一个自定义组件,它结合了ComboBox(下拉框)和TreePanel(树形面板)的功能。ComboBox通常用于提供一个下拉列表供用户选择,而TreePanel则用于展示层次结构的数据。ComboBoxTree将这两者...