第十二讲:ExtJS组件之TreePanel(下)
ext课件大体介绍
triggerAction
String(query、all默认query)
点击下列按钮时数据显示方式
listeWidth
Number
下列列表的宽度
常用事件
单击事件click(before) 双击事件dbclick(before) 右击事件contextmenu 加载事件load(before) 选择事件select(before) 值改变事件change(before) 失去焦点事件blur 获得焦点事件focus 键盘事件keydown、keyup 、keypress
border cls frame items
Boolean(默认false)
Boolean(默认true) string Boolean(默认false) Object/Array
是否自适应宽度
是否显示边框 引用的样式 是否显示背景色 容器子组件
listeners
renderTo title
Object
extjs入门重要的容器panel标准容器formpanel表单容器gridpanel列表容器treepanel树容器tabpanel标签容器重要的表单组件textfield文本框textarea多行文本checkbox多选框combobox下拉框compositefield组合组件datefield日期框datetimefield日期时间框displayfield显示框radio单选框重要的布局form表单布局formtable表单布局column列布局panel重要属性名称类型说明autoheightboolean默认false是否自适应高度autoscrollboolean默认false是否显示滚动条autowidthboolean默认false是否自适应宽度borderboolean默认true是否显示边框clsstring引用的样式frameboolean默认false是否显示背景色itemsobjectarray容器子组件listenersobject事件监听rendertomixed注入到对应的dom节点中titlestring标题formpanel重要属性名称类型说明autoheightboolean默认false是否自适应高度autowidthboolean默认false是否自适应宽度buttonalignstringleftcenterright默认right按钮对齐方式buttonsarray按钮数组clsstring引用的样式collapsibleboolean默认false容器是否可收缩defauletypestring默认组件类型frameboolean默认false是否显示背景色itemsobjectarray容器子组件labelalignstringlefttopright默认left标签对齐方式labelwidthnumber标签宽度layoutstring布局方式layoutconfigobject布局配置listenersobject事件监听titlestring标题gridpanel常用属性名称类型说明autoheightboolean默认false是否自适应高度autowidthboolean默认false是否自适应宽度clsstring引用的样式columnlineboolean默认false是否显示表格竖线columnsarray定义列表每列标题listenersob
ExtJS 4 官方指南翻译:Tree组件
1.Ext.create('Ext.tree.Panel', {2. renderTo: Ext.getBody(),3. title: 'Simple Tree',4. width: 150,5. height: 150,6. root: {7. text: 'Root',8. expanded: true,9. children: [10. {11. text: 'Child 1',12. leaf: true13. },14. {15. text: 'Child 2',16. leaf: true17. },18. {19. text: 'Child 3',20. expanded: true,21. children: [22. {23. text: 'Grandchild',24. leaf: true25. }26. ]27. }28. ]29. }30.});此树面板渲染到document.body元素上。
我们把定义的根节点(The Root Node)自动扩张开来,这是默认的情况。
根节点有三个子节点,其中前两个是leaf 节点,表示他们下面没有任何子节点(children)了(终结了)。
第三个节点是一个叶子节点,已经有一个child 的叶节点(one child leaf node)。
text 属性是节点的显示的文本。
可打开例子看看效果如何。
This Tree Panel renders itself to the document body. We defined a root node that is expanded by default. The root node has three children, the first two of which are leaf nodes which means they cannot have any children. The third node is not a leaf node and has has one child leaf node. The text property is used as the node's text label.See Simple Tree for a live demo.树面板的数据存储在TreeStore。
ExtjsPanel显示多行工具栏整理
让知识带有温度。
ExtjsPanel显示多行工具栏整理Extjs Panel 显示多行工具栏在Extjs 的Panel中,工具栏多行显示,加一个render侦听大事,。
Javascript 代码varoneTbar=newExt.Toolbar({items:[{text:复制},{text:粘贴}]});vartwoTbar=newExt.Toolbar({items:[newExt.Toolbar.TextItem(工具栏:)//显示文本]});第1页/共3页千里之行,始于足下。
varthreeTbar=newExt.Toolbar({items:[{xtype:tbfill},// 后面的'tools显示在右边{pressed:true,text:刷新}]});varwin=newExt.Window({title:墨客剑谍之演示多行tbar,width:500,height:300,modal:false,renterTo:Ext.getBody(),items:[{xtype:panel,tbar:[{text:添加},-,{text:删除},-,{text:修改}],第2页/共3页让知识带有温度。
listeners:{render:function(){oneTbar.render(this.tbar);//addonetbartwoTbar.render(this.tbar);//addtwotbarthreeTbar.render(this.tbar);//addthreetbar}}}]});win.show();///////////////////////////////////////简洁的做法是:tbar: new Ext.Panel({ border: false, items:[{ xtype: toolbar, items: [ ... ... ] }, { xtype: toolbar, items: [ ... ... ] }, { xtype: toolbar, items: [ ... ... ] }]})[Extjs Panel 显示多行工具栏]文档内容到此结束,欢迎大家下载、修改、丰富并分享给更多有需要的人。
ext之tree介绍
标签页
var tabs2 = new Ext.TabPanel({ renderTo: ‘tab’, activeTab: 0, //当前显示页 width:600, height:250, closable:true, //是否可以关闭 defaults:{autoScroll: true}, items:[{ title: 'Normal Tab', html: "My content was added during construction." },{ title: 'Ajax Tab 1', html: "My content was added during constructionss." },{ title: 'Ajax Tab 2', html: "My content was added during construction ddd." },{ title: 'Event Tab', html: "I am tab 4's content. I also have an event listener attached." },{ title: 'Disabled Tab', html: "Can't see me cause I'm disabled" } ] }); 插件plugins: new Ext.ux.TabCloseMenu(); (Ext.ux.TabScrollerMenu) Var p = new Ext.Panel(); tabs2.add(p).show(); 方法add
使用ExtJs构建树形菜单功能
ExtJs构建树形菜单功能在应用程序中,我们经常需要显示或处理树状结构的对象信息,比如部门信息和地区信息,树是一种非常典型的数据结构,这些信息都可以用树来表示。
对于传统的HTML页面来说,完全依靠手动编码来实现树是比较困难的,因为需要写很多的JS代码,对基于AJAX 异步加载来说尤其如此,不但涉及AJAX数据异步加载,还需要考虑跨浏览器支持,处理起来非常麻烦,EXT中提供了现成的树控件,通过这些控件,可以在B/S应用中快速开发出包含树形信息结构的应用。
本文就是详细全面介绍树形结构的使用过程和实例。
一、创建一棵树树控件由Ext.tree.TreePanel类定义,控件的名称为TreePanel,TreePanel类继承自Panel面板,在EXT中使用树控件非常简单,我们先来看一下代码(包含配置信息)。
<html xmlns="/1999/xhtml" ><head id="Head1" runat="server"><title>简单的树形</title><link r el="stylesheet" type="text/css" href="../resources/css/ext-all.css" /><script type="text/javascript" src="../adapter/ext/ext-base.js"</script> <script type="text/javascript" src="../ext-all.js"></script><script type="text/javascript">Ext.onReady(function(){var tree=new Ext.tree.TreePanel({el:'tree'});var root=new Ext.tree.TreeNode({text:'我是根'});tree.setRootNode(root);<!-- 设置根-->tree.render();<!--如果这是延时加载的组件,就要执行这个渲染的方法到其容器的元素-->});</script></head><body><div id="tree"></div></body></html>这里的参数tree表示渲染的DOM的id.HTML中应该要要有<div id="tree"></div>相对应,最后这棵树就出现在这个div的位置上。
ExtJs2.0学习系列(12)--Ext.TreePanel之第一式
ExtJs2.0学习系列(12)--Ext.TreePanel之第一式今天开始,我们就开始一起学习TreePanel了,道个歉,上篇的代码很乱阿.我总是喜欢用最简单的例子开始,去理解最基本的使用方法,减少对i后面高级使用的干扰! TreePanel是继承自Panel,所以很多在Panel中谈到的属性这里可能会一笔带过,如有问题,请参考ExtJs2.0学习系列(2)--Ext.Panel1.第一个静态树--最简单的树效果图:html代码:<div id="container"></div>js代码:Ext.onReady(function(){var mytree=new Ext.tree.TreePanel({el:"container",//应用到的html元素idanimate:true,//以动画形式伸展,收缩子节点title:"Extjs静态树",collapsible:true,rootVisible:true,//是否显示根节点autoScroll:true,autoHeight:true,width:150,lines:true,//节点之间连接的横竖线loader:new Ext.tree.TreeLoader(),//root:new Ext.tree.AsyncTreeNode({id:"root",text:"根节点",//节点名称expanded:true,//展开leaf:false,//是否为叶子节点children:[{text:'子节点一',leaf:true},{id:'child2',text:'子节点二',children:[{t ext:"111"}]}]})});mytree.render();//不要忘记render()下,不然不显示哦})在这里,我谈一个问题:/*只有loader和AsyncTreeNode才能使children显示出来,为什么?*/我在api中没有找到答案,甚至连children都没有看到,但是在原代码中,我们可以确定这个事实,只有loader实例后,AsyncTreeNode的children才会被递归的添加(appendChild)到它的父节点下,所以象示例中的代码,一定要注意条件.其他的子节点问题不受此限制!TreePanel基本配置参数://TreePanel配置参数1.animate:true//展开,收缩动画,false时,则没有动画效果2.autoHeight:true//自动高度,默认为false3.enableDrag:true//树的节点可以拖动Drag(效果上是),注意不是Draggable4.enableDD:true//不仅可以拖动,还可以通过Drag改变节点的层次结构(drap和drop)5.enableDrop:true//仅仅drop6.lines:true//节点间的虚线条7.loader:Ext.tree.TreeLoader//加载节点数据8.root:Ext.tree.TreeNode//根节点9.rootVisible:false//false不显示根节点,默认为true10.trackMouseOver:false//false则mouseover无效果eArrows:true//小箭头2.通过TreeNode自定义静态树例子1其实很受数据的限制,必须先要准备好数组对象,我们用另外的方式再写个例子,在写例子前,我们来学习下TreeNode的基本配置参数://TreeNode常用配置参数1.checked:false//true则在text前有个选中的复选框,false则text前有个未选中的复选框,默认没有任何框框2.expanded:fasle//展开,默认不展开3.href:"http:/"//节点的链接地址4.hrefTarget:"mainFrame"//打开节点链接地址默认为blank,可以设置为iframe名称id,则在iframe中打开5.leaf:true//叶子节点,看情况设置6.qtip:"提示"//提示信息,不过要 Ext.QuickTips.init();下7.text:"节点文本"//节点文本8.singleClickExpand:true//用单击文本展开,默认为双击效果图:html代码:<body style="margin:10px;"> <div id="container"></div><iframe name="mainFrame" id="mainFrame" height="100px" width="200px " src="jstest.htm"></iframe></body>js代码:Ext.onReady(function(){Ext.QuickTips.init();var mytree=new Ext.tree.TreePanel({el:"container",animate:true,title:"Extjs静态树",collapsible:true,enableDD:true,enableDrag:true,rootVisible:true,autoScroll:true,autoHeight:true,width:150,lines:true});//根节点var root=new Ext.tree.TreeNode({id:"root",text:"控制面板",expanded:true});//第一个子节点及其子节点var sub1=new Ext.tree.TreeNode({id:"news",text:"新闻管理",singleClickExpand:true});sub1.appendChild(new Ext.tree.TreeNode({ id:"addNews",text:"添加新闻",href:"",hrefTarget:"mainFrame",qtip:"打开百度",listeners:{//监听"click":function(node,e){alert(node.text)}}}));sub1.appendChild(new Ext.tree.TreeNode({ id:"editNews",text:"编辑新闻"}));sub1.appendChild(new Ext.tree.TreeNode({ id:"delNews",text:"删除新闻"}));root.appendChild(sub1);root.appendChild(new Ext.tree.TreeNode({ id:"sys",text:"系统设置"}));mytree.setRootNode(root);//设置根节点mytree.render();//不要忘记render()下,不然不显示哦})3.用TreeLoader加载数据生成树//这里只介绍TreeLoader的参数一个dataUrl:"*****.**"//地址url:"****.**"//url参数和dataUrl参数一样效果图:html代码:<div id="container"></div>js代码:Ext.onReady(function(){Ext.QuickTips.init();var mytree=new Ext.tree.TreePanel({el:"container",animate:true,title:"简单Extjs动态树",collapsible:true,enableDD:true,enableDrag:true,rootVisible:true,autoScroll:true,autoHeight:true,width:150,lines:true,//这里简简单单的loader的几行代码是取数据的,很经典哦loader:new Ext.tree.TreeLoader({dataUrl:"json.ashx"})});//根节点var root=new Ext.tree.AsyncTreeNode({id:"root",text:"控制面板",expanded:true});mytree.setRootNode(root);mytree.render();//不要忘记render()下,不然不显示哦})上面的代码中dataUrl地址为json.ashx的代码是怎样呢?让我们先来思考一个问题:/*---dataUrl的地址返回的内容必须为数组对象形式,但是.net页面如何返回这样的格式?---*/我的解决方案:把.net数据转换为json对象。
extjs_TreePanel的使用
本示例实现了以下功能:1.用TreePanel展现部门列表2 .点击部门,可以显示此部门下所有的员工在extjs 4中GridPanel的分页对于旧版本有所变化,具体变化可以参加下面提供的代码。
Ext.define('MyDesktop.EmployeeWindow', {extend: 'Ext.ux.desktop.Module',id: 'employee-win',init: function () {uncher = {text: '员工管理',iconCls: 'icon-grid',handler: this.createWindow,scope: this};},createWindow: function () {var desktop = this.app.getDesktop();var win = desktop.getWindow('employee-win');var deptStore = Ext.create('Ext.data.TreeStore', {model: 'Department',proxy: {type: 'ajax',url: '/department/getall'}});var employeeStore = Ext.create('Ext.data.Store', {id: 'employeeStore',model: 'Employee',pageSize: 2,//autoLoad: {start: 0, limit: 2},proxy: {type: 'ajax',url: '/employee/getpagedbydepartmentid',reader: {type: 'json',root: 'Data',totalProperty: 'Total'},extraParams: {departmentId: 0}}});if (!win) {win = desktop.createWindow({id: 'employee-win',title: '员工信息',width: 740,height: 480,iconCls: 'icon-grid',layout: 'border',items: [{region: 'west',split: true,margins: '2 0 5 5',width: 275,minSize: 100,maxSize: 500,xtype: 'treepanel',useArrows: true,root: {Name: '所有部门',Id: 0,expanded: true,selected: true},rootVisible: true,store: deptStore,singleExpand: true,columns: [{xtype: 'treecolumn',text: '名称',flex: 2,sortable: true,dataIndex: 'Name'}],listeners: {afterrender: function (tree) {tree.getSelectionModel().select(0);},itemclick: function (tree, record) {employeeStore.currentPage = 1;employeeStore.load({start: 0,limit: 2,params: {departmentId: record.data.Id}});}}},{region: 'center',layout: 'card',margins: '2 5 5 0',border: false,xtype: 'grid',store: employeeStore,columns: [{text: 'Id',dataIndex: 'Id'}, {text: '编号',dataIndex: 'Number'}, {text: "姓名",dataIndex: 'Name'}, {text: "部门",dataIndex: 'Department',renderer: function (value) {return ;}}, {text: "性别",dataIndex: 'Gender',renderer: function (value) {return value == 0 ? '女' : '男';}}],bbar: Ext.create('Ext.PagingToolbar', {store: employeeStore,displayInfo: true,displayMsg: '显示员工{0} - {1} / {2}',emptyMsg: '没有员工信息'})}],tbar: [{text: '添加',tooltip: '添加员工信息',handler: function () {var addWin;if (!addWin) {addWin = Ext.create('widget.window', {title: '添加员工信息',width: 400,modal: true,resizable: false,items: [{xtype: 'form',frame: true,bodyPadding: '10 10 0',url: '/employee/create',defaults: {anchor: '100%',allowBlank: false,msgTarget: 'side',labelWidth: 50},defaultType: 'textfield',items: [{fieldLabel: '姓名',name: 'name'}, {fieldLabel: '性别',name: 'Gender',value: '0'}],buttons: [{text: '保存',formBind: true,handler: function () {var form = this.up('form').getForm();var tree = win.items.items[0];var selModel = tree.getSelectionModel();var selected = selModel.getSelection();var dept = null;if (selected.length > 0) {dept = selected[0].data;}if (form.isValid()) {form.submit({params: {Number: dept == null ? 0 : dept.Id},waitTitle: '添加员工信息',waitMsg: '正在处理',success: function (form, action) {form.reset();employeeStore.load();},failure: function (form, action) {Ext.Msg.alert('添加员工信息', '添加员工信息失败');}});}}}, {text: '重置',handler: function () {this.up('form').getForm().reset();}}]}]});}addWin.show();}}, '-', {text: '修改',tooltip: '修改员工信息',iconCls: 'update',handler: function () {var grid = win.items.items[0];var selModel = grid.getSelectionModel();var selected = selModel.getSelection();if (selected.length == 0) {Ext.Msg.alert('修改', '请选择员工');return;}var employee = selected[0].data;var updateWin;if (!updateWin) {updateWin = Ext.create('widget.window', { title: '修改员工信息',width: 400,modal: true,items: [{xtype: 'form',frame: true,bodyPadding: '10 10 0',url: '/employee/update',defaults: {anchor: '100%',allowBlank: false,msgTarget: 'side',labelWidth: 50},defaultType: 'textfield',items: [{xtype: 'hiddenfield',name: 'id',value: employee.Id}, {fieldLabel: '名称',name: 'name',value: }, {xtype: 'textareafield',fieldLabel: '部门',name: 'number',value: employee.Number}, {fieldLabel: '性别',name: 'gender',value: employee.Gender}],buttons: [{text: '保存',formBind: true,handler: function () {var form = this.up('form').getForm();if (form.isValid()) {form.submit({waitTitle: '修改员工信息',waitMsg: '正在处理',success: function (form, action) {form.reset();employeeStore.load();},failure: function (form, action) {Ext.Msg.alert('更新员工信息', '更新员工信息失败');}});}}}, {text: '重置',handler: function () {this.up('form').getForm().reset();}}]}]});}updateWin.show();}}]});}win.show();return win;}});。
Extjs树控件介绍
树控件:树是由根节点、叶子节点、非叶子节点(目录节点)组成的,其中根节点只有一个,叶子节点是终端节点。
ext中节点类型有普通树节点和异步加载节点(用于后台交互)ext中提供了节点的选择模型:单选(选择一行)多选(选择多行)复选(通过复选框选择)TreePanel用于呈现我们树的面板。
TreeNode是树节点,AsyncTreeNode是动态加载树节点(异步树节点)。
既然我们要创建Tree,首先要创建一个根,当然ext中根节点也是节点所以统一用TreeNode进行创建。
TreeNode中text属性表示节点名称,leaf表示节点是否是叶子节点,id节点的唯一标识,href,hreftarget表示连接地址及打开方式,draggable表示拖拽,checked表示在节点前面是否展现复选框,allowChildren,allowDrag是否允许添加子节点,是否允许拖动等等。
这里text,id是必须的。
我们创建好根之后,就要创建一个树面板(TreePanel)。
TreePanel中的配置选项包含root属性,根节点。
renderto用于渲染的div<body><div id="hello"></div></body>Ext.onReady(function(){var root = new Ext.tree.TreeNode({id:"root",text:"我是根"});var tree = new Ext.tree.TreePanel({renderTo:"hello",root:root,width:200});});这样一颗简单的树就呈现出来了好像太简单了我们就想根节点添加一些节点Ext.onReady(function(){var root = new Ext.tree.TreeNode({id:"root",text:"我是根"});root.appendChild(new Ext.tree.TreeNode({id:"c1",text:"我是子节点"}));var tree = new Ext.tree.TreePanel({renderTo:"hello",root:root,width:200});});我们发现树的图标发生了改变,可以清晰的看出是否是叶子节点。
JavaScript的ExtJS框架中数面板TreePanel的使用实例解析
TreePanel为ExtJS提供了一个方便的树结构数据展示,尤其是在处理JSON格式数据时十分常用,接下来我们就来看两则JavaScript的ExtJS框架中数面板TreePanel的使用实例解析在ExtJS中,不管是叶子节点还是非叶子节点,都统一用TreeNode表示树的节点。
在ExtJS中,有两种类型的树节点。
一种节点是普通的简单树节点,由Ext.tree.TreeNode定义,另外一种是需要异步加载子节点信息的树节点,该类由Ext.tree.AsyncTreeNode定义。
在数据中,text 显示文字,leaf 节点,children 子节点,expanded 展开var store = Ext.create(‘Ext.data.TreeStore', {root: {expanded: true,children: [{ text: “留学”, leaf: true },{ text: “功课”, expanded: true, children: [{ text: “英语”, leaf: true },{ text: “代数”, leaf: true}] },{ text: “托福”, leaf: true }]}});TreePanel从servlet中读取JSON数据在Ext JS的Tree中的数据往往是从服务器端的动态程序中获取的。
为了获取数据,我们可以先编写一个返回JSON的Servlet共前台的树形组建访问:服务器端servlet代码:import java.io.IOException;import java.io.PrintWriter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;public class TreeNodeServlet extends HttpServlet {protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");//这里的node是前台的AsyncTreeNode组建中设置的ID,见下面的JS程序String treeNode = request.getParameter("node");String json = "";PrintWriter out = response.getWriter();if("0".equals(treeNode)) {json+="[{id:1,text:'0-1'},{id:2,text:'0-2'}]";}else if("1".equals(treeNode)) {json+="[{id:11,text:'0-1-1',leaf:true},{id:12,text:'0-1-2',leaf:true}]";}else if("2".equals(treeNode)) {json+="[{id:21,text:'0-2-1'},{id:22,text:'0-2-2',leaf:true}]";}else if("21".equals(treeNode)) {json+="[{id:211,text:'0-2-1-1',leaf:true},{id:212,text:'0-2-1-2',leaf:true}]";}out.write(json);}}现在就可以在前台的TreePanel组建的loader方法中访问上面创建的servlet了,代码如下:客户端显示代码Ext.onReady(function(){var tree = new Ext.tree.TreePanel({//这里的div-tree是在html中创建的一个对象的id值el: 'div-tree',//使用loader方法访问TreeNodeServletloader: new Ext.tree.TreeLoader({dataUrl:'../TreeNodeServlet'})});var root = new Ext.tree.AsyncTreeNode({id:'0',text:'0'})tree.setRootNode(root);tree.render();root.expand();});效果图如下:在树TreePanel之间拖放结点有时候我们在程序中,需要把一棵TreePanel的元素拖放到另外一棵TreePanel中,如果是在同一棵树中拖动时设置组件的enableDD参数为true,而现在需要在不同给的书之间拖动元素,这个时候就可以设置组件的enableDrag和enableDrop参数,详细示例如下:1.编写JS代码:JS代码Ext.onReady(function(){ var tree1 = new Ext.tree.TreePanel({ el: 'tree1', //这里设置enableDrag为true表示可以从这里拖动元素到别处 enableDrag:true, loader: new Ext.tree.TreeLoader({dataUrl: 'treeData1.txt'}) }); var tree2 = new Ext.tree.TreePanel({ el: 'tree2', //这里设置enableDrop为true表示可以在这棵树中放置拖动过来的元素 enableDrop:true, loader: new Ext.tree.TreeLoader({dataUrl: 'treeData2.txt'}) }); var root1 = new Ext.tree.AsyncTreeNode({text:'跟节点'}); var root2 = new Ext.tree.AsyncTreeNode({text:'图书'}); tree1.setRootNode(root1); tree2.setRootNode(root2); tree1.render(); tree2.render();});2.HTML代码如下:HTML代码<div id="tree1"></div><div id="tree2"></div>3.编写两个TreeLoader需要装载的txt文件,里面的数据为JSON格式:treeData1.txt:[ {text:'非叶子结点'}, {text:'叶子结点',leaf:true}]treeData2.txt:[ {text:'计算机',children:[ {text:'Java',children:[ {text:'Java核心技术',leaf:true}, {text:'Thinking in Java',leaf:true} ]}, {text:'算法导论',leaf:true} ]}, {text:'音乐',children:[ {text:'乐理基础',leaf:true}, {text:'卡尔卡西古典吉他教程',leaf:true} ]}]4.程序效果如下图所示:。
extJs 2.0学习笔记(Ext.Panel篇)
extJs 2.0学习笔记(Ext.Panel篇一)2009-01-19 08:51老实不客气的说:没有Panel,就没有extjs的盛名。
那些最常见的UI组件都是继承自它。
暴爽的东西啊。
我就在想,这么好的东西怎么会出现得这么晚呢?在这一篇中,将详细讲一讲Ext.Panel的方方面面。
现在遇到了一些问题:一、显示的问题事实上,这个问题是所有组件的问题,凡是从ponent继承的类都面临这个问题。
例如,我写了一行这样的代码,但是没有任何结果:var panel=new Ext.Panel({width:300,height:300,title:'标题栏'});这是什么原因呢?if(this.applyTo){this.applyToMarkup(this.applyTo);delete this.applyTo;}else if(this.renderTo){this.render(this.renderTo);delete this.renderTo;}这几行代码是写在ponent的构造函数中的。
它标示如果applyTo、renderTo有值,就会在对象创建的时候直接呈现,如果这两值都没有,那就只能手工调用render函数了。
然而这有一个问题,applyTo与renderTo倒底有什么区别,它们取值类型可以是哪些呢?看代码。
applyTo的情况依赖于this.applyToMarkup来实现呈现。
找到它的代码:applyToMarkup : function(el){this.allowDomMove = false;this.el = Ext.get(el);this.render(this.el.dom.parentNode);}而renderTo的情况是直接依赖于this.render(this.renderTo)的。
这两者的差别很明显了,但是,这个问题到目前还不能说清楚,我发现,Ext.Panel最后生成的代码如下:<div id="panel2" class="x-panel" style="width: 300px;"><div id="ext-gen14" class="x-panel-header x-unselectable"style="-moz-user-select: none; cursor: move;"><span id="ext-gen18" class="x-panel-header-text">这是标题栏</span> </div><div id="ext-gen15" class="x-panel-bwrap"><div id="ext-gen16" class="x-panel-body" style="width: 298px; height: 273px;">这是面板的内容!!!</div></div></div>由上代码可知,panel的代码总是外面一个容器:x-panel,然后里面几个,这儿是:x-panel-header、x-panel-bwrap。
extjs中的Panel组件
extjs中的Panel组件今天介绍extjs中的Panel组件。
//html代码<div id="container"></div>//js代码var p = new Ext.Panel({title: 'My Panel',//标题collapsible:true,//右上角上的那个收缩按钮,设为false则不显示 renderTo: 'container',//这个panel显示在html中id为container 的层中width:400,height:200,html: "<p>我是内容,我包含的html可以被执行!</p>"//panel主体中的内容,可以执行html代码});因为panel组件的子类组件包括TabPanel,GridPanel,FormPanel,TreePanel组件,所以非常有必要介绍Panel组件的配置参数和相关的属性、方法。
//配置参数(只列举部分常用参数)1.autoLoad:有效的url字符串,把那个url中的body中的数据加载显示,但是可能没有样式和js控制,只是html数据2.autoScroll:设为true则内容溢出的时候产生滚动条,默认为false3.autoShow:设为true显示设为"x-hidden"的元素,很有必要,默认为false4.bbar:底部条,显示在主体内,//代码:bbar:[{text:'底部工具栏bottomToolbar'}],5.tbar:顶部条,显示在主体内,//代码:tbar:[{text:'顶部工具栏topToolbar'}],6.buttons:按钮集合,自动添加到footer中(footer参数,显示在主体外)//代码:buttons:[{text:"按钮位于footer"}]7.buttonAlign:footer中按钮的位置,枚举值为:"left","right","center",默认为right8.collapsible:设为true,显示右上角的收缩按钮,默认为false9.draggable:true则可拖动,但需要你提供操作过程,默认为false10.html:主体的内容11.id:id值,通过id可以找到这个组件,建议一般加上这个id值12.width:宽度13.height:高度13.title:标题14.titleCollapse:设为true,则点击标题栏的任何地方都能收缩,默认为false.15.applyTo:(id)呈现在哪个html元素里面16.contentEl:(id)呈现哪个html元素里面,把el内的内容呈现17.renderTo:(id)呈现在哪个html元素里面//关于这三个参数的区别(个人认为:applyTo和RenderTo强调to到html元素中,contentEl则是html元素到ext组件中去):英文如下(本人英语poor,不敢乱翻译):contentEl - This config option is used to take existing content and placeit in the body of a new panel. It is not going to be the actual panel itself. (It will actually copy the innerHTML of the el and use it for the body). You should add either the x-hidden or the x-hide-display CSS class to prevent a brief flicker of the content before it is rendered to the panel. applyTo - This config option allows you to use pre-defined markup to create an entire Panel. By entire, I mean you can include the header, tbar, body, footer, etc. These elements must be in the correct order/hierarchy. Any components which are not found and need to be created will be autogenerated. renderTo - This config option allows you to render a Panel as its created. This would be the same as saying myPanel.render(ELEMENT_TO_RENDER_TO); 哪位大人帮忙翻译下...考虑到入门,方法事件会在以后的文章中以实例穿插。
Ext.tree.PanelExtjs在表格中添加树结构,并实现节点移动功能
Ext.tree.PanelExtjs在表格中添加树结构,并实现节点移动功能最近在⽤Extjs 做后台管理系统,真的⾮常好⽤。
总结的东西分享⼀下。
先展⽰⼀下效果图好了,开始吧!⾸先说⼀下我的创建结构:⼀、构造内容这个函数中包括store的创建,treePanel的创建⼀个treePanel必须绑定⼀个.function constructor(config){//创建⼀个treeStore 数据(我的⽤ajax取的,你们随意~)var store = Ext.create('Ext.data.TreeStore', {proxy: {type: 'ajax',url: 'http://localhost/data/aa.txt',reader: {type: "json",rootProperty: "children",transform: function (data) {if (data.code === 1) console.log("error");return data;}}},folderSort: true});// 创建treePanel了var $tree = Ext.create('Ext.tree.Panel', {width: '100%',height: 600,store: store,useArrows: true,rootVisible: false,multiSelect: true, // 多选//singleExpand: true, //单展开autoScroll: true, // ⾃动滚屏columns: [{ // 列项xtype: 'treecolumn',text: '菜单名称',width: 250,sortable: true,menuDisabled: true,dataIndex: 'text'},{text: '节点类型',width: 150,dataIndex: 'user',menuDisabled: true,align: 'center',sortable: true},{text: '新增',width: 70,align: 'center',menuDisabled: true,renderer: function (value, metaData) {return "<a href='#" + Math.random() + "'>新增</a>";}},{text: '修改',width: 100,menuDisabled: true,xtype: 'actioncolumn',align: 'center',icon: '/images/edit.png'}, {xtype: 'actioncolumn',text: '删除',width: 100,menuDisabled: true,icon: '/images/delete.png',handler: function(grid, rowIndex,colIndex,record) {var rec = store.getAt(rowIndex);if(rec.get('children') === null){Ext.MessageBox.confirm("删除","确定删除吗?",function( button,text ){if( button == 'yes'){rec.remove();}});}else{Ext.MessageBox.alert("删除","当前元素含有⼦节点,不能被删除");}}}, {text: '上移',width: 50,menuDisabled: true,align: 'center',renderer:function(value, cellmeta, record, rowIndex, columnIndex, store){return "<a href='#" + Math.random() + "'>上移</a>";}},{text: '下移',width: 50,menuDisabled: true,align: 'center',renderer:function(value, cellmeta, record, rowIndex, columnIndex, store){return "<a href='#" + Math.random() + "'>下移</a>";}},{text: '升级',width: 50,menuDisabled: true,align: 'center',renderer:function(value, cellmeta, record, rowIndex, columnIndex, store){return "<a href='#" + Math.random() + "'>升级</a>";}},{text: '降级',width: 50,menuDisabled: true,align: 'center',renderer:function(value, cellmeta, record, rowIndex, columnIndex, store){return "<a href='#" + Math.random() + "'>降级</a>";}}],listeners:{ //监听事件cellclick: function (view, td, cellIndex, record, tr, rowIndex, e, eOpts){ // 单元格点击,贼好⽤ //判断点击的第⼏列(索引从0开始)if(cellIndex === 2) return display$WindowAddNode(rowIndex,record, store);if(cellIndex === 5) return moveEvent(rowIndex,record,store);if(cellIndex === 6) return downEvent(rowIndex,record, store);if(cellIndex === 7) return upgradeEvent(rowIndex,record, store);if(cellIndex === 8) return downgradeEvent(rowIndex,record, store);}}});config.parent.add($tree);return $tree;}⾯板创建完了,下⾯该实现功能了。
TreePanel的各项属性
TreePanel的各项属性TreePanel的各项属性1、Ext.tree.TreePanel主要配置项:root:树的根节点。
rootVisible:是否显示根节点,默认为true。
autoScroll:当内容超过预设的高度时自动出现滚动条。
autoHeight: true 自动高度,默认为falsedraggable:是否允许拖曳。
enableDrag:true树的节点可以拖动Drag(效果上是),注意不是DraggableenableDD:设置树的节点是否可以拖动。
enableDrop:true//仅仅droplines:是否显示树线,默认为true。
loader:树节点的加载器,默认为Ext.tree.TreeLoader。
selModel:树的选择模式,默认为Ext.tree.DefaultSelectionModel。
pathSeparator:树节点路径的分隔符,默认为“/”。
singleExpand:是否一次只展开树中的一个节点,默认为true。
requestMethod:请求方法,可选值有POST、GET。
containerScroll:是否将树形面板注册到滚动管理器ScrollManager中。
useArrows:是否在树中使用Vista 样式箭头,默认为false。
主要方法:collapseAll():收缩所有树节点expandAll():展开所有树节点getRootNode():获取根节点getNodeById(String id):获取指定id的节点expand( [Boolean deep], [Boolean anim], [Function callback],[Object scope] )expandPath( String path, [String attr], [Function callback] )getChecked( [String attribute], [TreeNode startNode] )selectPath( String path, [String attr], [Function callback] )getSelectionModel():2、Ext.data.Node主要配置项:id:节点idleaf:当前节点是否为叶子节点主要属性:id:节点idattributes:节点属性的集合parentNode:当前节点的父节点childNodes:当前节点所有子节点组成的数组firstChild:当前节点的第一个直接子节点,如果没有则为null值lastChild:当前节点的最后一个直接子节点,如果没有则为null 值nextSibling:当前节点的下一个兄弟节点,如果没有则为null值previousSibling:当前节点的前一个兄弟节点,如果没有则为null值主要方法:appendChild( Node/Array node ):追加新的子节点bubble( Function fn, [Object scope], [Array args] ):从当前节点开始向上迭代调用指定函数,如果指定函数返回false则将终止迭代。
Coolite-Toolkit学习笔记七:常用控件TreePanel
Coolite Toolkit中的Tree控件和Menu控件一样不能独立使用,他们必须依托与容器控件,理所当然Tree控件就依托于TreePanel 控件了。
TreePanel 提供了很多的集合属性,可用来定制非常丰富的切功能强大的树型界面。
从上图中可看出,TreePanel提供了许多的集合属性,包括事件、数据加载、按扭、自定义配置、根节点、工具栏、顶部和底部工具栏等等很多功能点。
比如我们可以使用TopBar来定制一个树的顶部工具栏,如下代码片段:<ext:TreePanel ID="tPanel" runat="server" Height="300" Title="树控件学习"Icon="BookOpen" Width="180"><TopBar><ext:Toolbar runat="server"><Items><ext:Button runat="server" Text="全部展开" Icon="Arrow Out"><Listeners><Click Handler="#{tPanel}.expandAll();"/></Listeners></ext:Button><ext:Button runat="server" Text="全部折叠" Icon="Arrow In"><Listeners><Click Handler="#{tPanel}.collapseAll();"/></Listeners></ext:Button></Items></ext:Toolbar></TopBar></ext:TreePanel>如上通过html标签的方式使用TreePanel的TopBar定义好了一个树的顶部工具栏,并实现了其单击的客户端事件,通过点击相应的按扭可实现树的折叠和展开功能。
ExtJs TreePanel使用TreeLoader在IE下无法正常加载显示的解决方法
ExtJs TreePanel使用TreeLoader在IE下无法正常加载显示的解决方法小菜使用如下代码生成TreePanel,代码与ExtJs自带的examplesCode<script language="JavaScript" type="text/javascript"><!--Ext.BLANK_IMAGE_URL = '../resources/ext/resources/im ages/default/s.gif';Ext.onReady(function() {var ddTree = new Ext.tree.TreePanel({el: 'ddTree',useArrows: true,enableDD: true,width: 200,height: 300,loader: new Ext.tree.TreeLoader({dataUrl: "xxx.ashx"}),rootVisible: false,root: new Ext.tree.AsyncTreeNode({}),listeners: {'beforeload': beforeloadHandler,'load': loadHandler}});ddTree.render();ddTree.expandAll(); // 展开所有结点var loading = null;function beforeloadHandler() { // 加载前事件响应处理loading = new Ext.LoadMask(Ext.get(ddTree.getEl() ), { msg: "请等待" });loading.show();}function loadHandler() { // 加载后事件响应处理loading.hide();}});--></script>分析问题:1、是否是xxx.ashx出现异常?使用Firefox工作正常,所以排除,并且通过Firebug取到xxx.ashx输出json数据如下,所以该可能排除。
Extjs4.1中treepanel的全部高级操作教程
ExtJS 4 树先看个简单的效果图:Tree Panel是ExtJS中最多能的组件之一,它非常适合用于展示分层的数据。
Tree Panel和Grid Panel继承自相同的基类,所以所有从Grid Panel能获得到的特性、扩展、插件等带来的好处,在Tree Panel中也同样可以获得。
列、列宽调整、拖拽、渲染器、排序、过滤等特性,在两种组件中都是差不多的工作方式。
让我们开始创建一个简单的树组件Ext.create('Ext.tree.Panel', {renderTo: Ext.getBody(),title: 'Simple Tree',width: 150,height: 150,root: {text: 'Root',expanded: true,children: [{text: 'Child 1', leaf: true},{text: 'Child 2', leaf: true},{text: 'Child 3',expanded: true,children: [{text: 'Grandchild', leaf: true}]}]}});运行效果如图这个Tree Panel直接渲染在document.body上,我们定义了一个默认展开的根节点,根节点有三个子节点,前两个子节点是叶子节点,这意味着他们不能拥有自己的子节点了,第三个节点不是叶子节点,它有一个子节点。
每个节点的text属性用来设置节点上展示的文字。
Tree Panel内部使用Tree Store存储数据。
上面的例子中使用了root配置项作为使用store的捷径。
如果我们单独指定store,代码像这样:var store = Ext.create('Ext.data.TreeStore', {root: {text: 'Root',expanded: true,children: [{text: 'Child 1', leaf: true},{text: 'Child 2', leaf: true},...]}});Ext.create('Ext.tree.Panel', {title: 'Simple Tree',store: store,...});The Node Interface 节点接口上面的例子中我们在节点上设定了两三个不同的属性,但是节点到底是什么?前面提到,TreePanel绑定了一个TreeStore,Store在ExtJS 中的作用是管理Model实例的集合。
extjsext.tree.panel添加监听事件
extjsext.tree.panel添加监听事件EXTJS的树,如下⽅式添加事件,可以响应选择改变、单击,但双击没有响应。
⽽且在选择改变时,同时也会触发单击事件。
问题出在哪⾥?var treestore = Ext.create('Ext.data.TreeStore', {2 root: {3 text:"集团",4 id: 'org01',5 checked: true,6 expanded: true,7 children: [8 { text: "华南区", id: 'org02', expanded: true},9 { text: "华东区", id: 'org03', expanded: true, children: [10 { text: "江苏", id: 'org031', leaf: true},11 { text: "浙江", id: 'org032', leaf: true}12 ] },13 { text: "华北区", id: 'org04', expanded: true}14 ]15 }16 });1718 Ext.define('MyApp.Examples.TreeDemo', {19 extend: 'Ext.panel.Panel',2021 height: 465,22 width: 653,23 title: 'My Panel',2425 initComponent: function() {26var me = this;2728 Ext.applyIf(me, {29 items: [30 {31 xtype: 'treepanel',32 height: 430,33 width: 200,34 autoScroll:true,35 animate:true,36 id: 'treeOrg',3738//默认根⽬录显⽰39 rootVisible:true,40 border:false,41 animate:true,42 store: treestore,43 lines:true,44 enableDD:true,45 containerScroll:true,464748 listeners: {4950 itemdbclick:{51 fn: function(view, record, item, index, e,obj){52 alert('dbclick');e.stopEvent;53 },54 scope: this55 }56 ,57 itemclick: {58 fn: function(view, record, item, index, e,obj){59 alert(record.data.id+':'+record.data.text);60 e.stopEvent;61 },62 scope: this63 },64 checkchange: {65 fn: function(node,checked,obj) {66 alert('checkchange');676869 }70 }71 }7273 }74 ]75 });7677 me.callParent(arguments);78 }7980 });1。
Ext?TreePanel实现单选等功能
Ext TreePanel实现单选等功能在ext1.x里,树是没有checkbox的, 幸好在2.X版本里提供了这个功能, 在许多应用里, 带有checkbox的树使用还是很常见的Ext2.X提供了简单的checkbox实现,但对于一些复杂的需求,如: 级联多选(选中父结点,自选中其所有子结点和所有父结点) , 单选等等, Ext2.X并没有帮我们实还有最难解决的情况, 当树是异步的时候, 要想级联多选, 实现起来有些难度在此, 通过对Ext.tree.TreeNodeUI进行扩展,这些问题都得到很好的解决对Ext.tree.TreeNodeUI 进行checkbox功能的扩展,后台返回的结点信息不用非要包含checked属性扩展的功能点有:一、支持只对树的叶子进行选择只有当返回的树结点属性leaf = true 时,结点才有checkbox可选使用时,只需在声明树时,加上属性onlyLeafCheckable: true 既可,默认是false二、支持对树的单选只允许选择一个结点使用时,只需在声明树时,加上属性 checkModel: "single" 既可三、支持对树的级联多选当选择结点时,自动选择该结点下的所有子结点,或该结点的所有父结点(根结点除外),特别是支持异步,当子结点还没显示时,会从后台取得子结点,然后将其选中/取消选中使用时,只需在声明树时,加上属性 checkModel: "cascade" 或"parentCascade"或"childCascade"既可cascade :级联选中所有父结点和子结点parentCascade :级联选中所有父结点childCascade :级联选中所有子结点四、添加"check"事件该事件会在树结点的checkbox发生改变时触发使用时,只需给树注册事件,如:tree.on("check",function(node,checked){...});默认情况下,checkModel为'multiple',也就是多选;onlyLeafCheckable为false,所有结点都可选使用方法:在loader里加上baseAttrs:{uiProvider:Ext.ux.TreeCheckNodeUI} 既可.例如:Js代码Java代码1.var tree = new Ext.tree.TreePanel({2.el:'tree-ct',3.width:568,4.height:300,5.checkModel: 'cascade', // 对树的级联多选6.onlyLeafCheckable: false,//对树所有结点都可选7.animate: false,8.rootVisible: false,9.autoScroll:true,10.dwrCall:Tmplt.getTmpltTree,11.baseAttrs: { uiProvider: Ext.ux.TreeCheckNodeUI } //添加uiProvider属性12.}),13.root: new Ext.tree.AsyncTreeNode({ id:'0' })14.});15.tree.on("check",function(node,checked){alert(node.tex t+" = "+checked)}); //注册"check"事件16.tree.render();17.18.var tree = new Ext.tree.TreePanel({19.el:'tree-ct',20.width:568,21.height:300,22.checkModel: 'cascade', //对树的级联多选23.onlyLeafCheckable: false,//对树所有结点都可选24.animate: false,25.rootVisible: false,26.autoScroll:true,27.loader: new Ext.tree.DWRTreeLoader({28.dwrCall:Tmplt.getTmpltTree,29.baseAttrs: { uiProvider: Ext.ux.TreeCheckNodeUI }//添加uiProvider属性30.}),31.root: new Ext.tree.AsyncTreeNode({ id:'0' })32.});33.tree.on("check",function(node,checked){alert(node.tex t+" = "+checked)}); //注册"check"事件34.tree.render();需要注意的是, 使用例子里的Tree 使用了Ext.tree.DWRTreeLoader这个扩展类,用来加载后台树结点,这和使用其它的loader没有区别的,如果您使用其它的loader, 同样加上baseAttrs: { uiProvider: Ext.ux.TreeCheckNodeUI } 就行了Java代码1.实现单选功能:2.this.on('checkchange',this.check,this);3.getNodes:function(treePanel){4.var startNode = treePanel.getRootNode();5.var r = [];6.var f = function(){7.r.push(this);8.};9.10.startNode.cascade(f);11.return r;12.},13.check : function(node,bool) {14.if(!bool){15.return;16.}17.if(this.checkModel=='single'){18.var nodes =this.getNodes(this);19.if(nodes && nodes.length>0){20.for(var i=0,len=nodes.length;i21.if(nodes[i].id!=node.id){22.if(nodes[i].getUI().checkbox){23.nodes[i].getUI().checkbox.checked = false;24.nodes[i].attributes.checked=false;25.}26.}27.}28.}29.}30.}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
id:"gChildNode2",
text:"孙子节点2"
})
//孙子节点
vargChildNode3 =newExt.tree.TreeNode({
id:"gChildNode3",
text:"孙子节点3"
})
childNode1.appendChild(gChildNode1);
icon:"folder.jpg"
})
root.on("click",function(){
root.getUI().getIconEl().src="folder2.jpg"
});
//子节点
varchildNode1 =newExt.tree.TreeNode({
id:"chileNode1",
text:"子节点1",
id:"chileNode3",
text:"子节点3"
})
root.appendChild(childNode1);
root.appendChild(childNode2);
root.appendChild(childNode3);
vartreePanel =newExt.tree.TreePanel({
id:"chileNode2",
text:"子节点3"
})
root.appendChild(childNode1);
root.appendChild(childNode2);
root.appendl =newExt.tree.TreePanel({
varsn = sm.getSelectedNodes();
varlength = sn.length;
if(length != 0) {
alert(length);
}else{
alert("没有选择任何节点");
}
}
}
]
})
})
示例六:可编辑的树。
new Ext.tree.TreeEditor(treePanel);
icon:"folder.jpg"
})
//孙子节点
vargChildNode1 =newExt.tree.TreeNode({
id:"gChildNode1",
text:"孙子节点1",
icon:"folder.jpg"
})
//孙子节点
vargChildNode2 =newExt.tree.TreeNode({
示例一:树的一些常用配置属性。
Ext.onReady(function(){
varloader=newExt.tree.TreeLoader({
url:"treedata3.js"
});
varroot=newExt.tree.TreeNode({
id:"root",
text:"根节点"
});
root.appendChild(newExt.tree.TreeNode({
id:"child2",
text:"子节点2",
loader:loader
}))
vartree=newExt.tree.TreePanel({
renderTo:"TestTree",
root:root,
width:400,
height:400
});
})
示例三:从JSP中获得数据并构造动态树。
Ext.onReady(function(){
renderTo:"TestTree11",
width:300,
height:400,
root:root,
bbar:[
{
text:"获得选择的节点",
handler:function(){
varsm = treePanel.getSelectionModel();
varsn = sm.getSelectedNode();
示例七:按指定属性进行排序。
newExt.tree.TreeSorter(treePanel,{
property:"id"
})
示例八:替换Tree中图片。
Ext.onReady(function(){
//根节点
varroot =newExt.tree.TreeNode({
id:"root",
text:"根节点",
response.getWriter().write(tree.toString());
%>
示例四:TreeSelectionModel选择模型。
Ext.onReady(function(){
//根节点
varroot =newExt.tree.TreeNode({
id:"root",
text:"根节点"
url:"treedata3.js"
});
varroot=newExt.tree.TreeNode({
id:"root",
text:"根节点",
checked:true,//true则在text前有个选中的复选框,false则text前有个未选中的复选框,默认没有任何框框
expanded:true,//是否展开
id:"chileNode3",
text:"子节点3"
})
root.appendChild(childNode1);
root.appendChild(childNode2);
root.appendChild(childNode3);
vartreePanel =newExt.tree.TreePanel({
childNode1.appendChild(gChildNode2);
childNode1.appendChild(gChildNode3);
//子节点
varchildNode2 =newExt.tree.TreeNode({
id:"chileNode2",
text:"子节点2"
})
//子节点
varchildNode3 =newExt.tree.TreeNode({
childNode1.appendChild(gChildNode2);
childNode1.appendChild(gChildNode3);
//子节点
varchildNode2 =newExt.tree.TreeNode({
id:"chileNode2",
text:"子节点2"
})
//子节点
varchildNode3 =newExt.tree.TreeNode({
})
//子节点
varchildNode1 =newExt.tree.TreeNode({
id:"chileNode1",
text:"子节点1"
})
//孙子节点
vargChildNode1 =newExt.tree.TreeNode({
id:"gChildNode1",
text:"孙子节点1"
})
//孙子节点
root:root,
width:400,
height:400,
animate:false,//收缩动画
autoHeight:true,//自动高度
enableDrag:true,//是否可以拖动
//enableDD:true, //drap和drop
enableDrop:true,//放置节点
lines:false,//节点间虚线
//根节点
varroot =newExt.tree.AsyncTreeNode({
id:"root",
text:"根节点",
loader:newExt.tree.TreeLoader({
url:"AsyncServer2.jsp"
})
})
vartreePanel =newExt.tree.TreePanel({
if(sn !=null) {
alert(sn.text);
}else{
alert("没有选择任何节点");
}
}
}
]
})
})
示例五:选择多个节点。
Ext.onReady(function(){
//根节点
varroot =newExt.tree.TreeNode({
id:"root",
text:"根节点"
qtip:"根节点",//提示信息
singleClickExpand:true//单击文本展开
});
root.appendChild(newExt.tree.TreeNode({
id:"child1",
text:"子节点1"
}))