1 树(Tree Panel)
在Web应用程序开发中,Tree Panel使用的频率很高。Tree Panel是ExtJS的核心组件之一,Tree Panel和Grid Panel一样都是从相同的类(Ext.panel.Table)扩展,因此Tree Panel具有Grid Panel的所有功能,Grid Panel的features、extensions和plugins在Tree Panel也能使用。Tree Panel的实现非常方便,通过以下代码就能生成一个简单的Tree。
Ext.create('Ext.tree.Panel', { renderTo: Ext.getBody(), title: 'Simple Tree', width: 150, height: 150, root: { text: 'Root', //树的根节点文本 expanded: true, //展开Root节点 children: [ //根节点(Root)的子节点数组 { text: 'Child 1', //子节点的显示文本 leaf: true //是否为叶子节点,true表示该节点是叶子节点 }, { text: 'Child 2', leaf: true }, { text: 'Child 3', expanded: true, //展开节点 children: [ //节点的子节点数组 { text: 'Grandchild', leaf: true } ] } ] } });
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, //绑定上面创建的TreeStore ... });
Tree Panel和Grid Panel一样可以显示多列数据,从代码上看,多列树和普通的Grid Panel的区别在于,多列树的columns中必须有一个列是treecolumn。
var tree = Ext.create('Ext.tree.Panel', { renderTo: Ext.getBody(), title: 'TreeGrid', width: 300, height: 150, fields: ['name', 'description'], //字段 columns: [{ xtype: 'treecolumn', //把列的类型设置成treecolumn text: 'Name', dataIndex: 'name', //绑定name字段 width: 150, sortable: true }, { text: 'Description', dataIndex: 'description', //绑定description字段 flex: 1, sortable: true }], root: { //树的根节点,也就是TreeStore的快捷方式 name: 'Root', //根节点name字段的值 description: 'Root description', //根节点description字段的值 expanded: true, //展开根节点 children: [{ //根节点的子节点数组 name: 'Child 1', description: 'Description 1', leaf: true }, { name: 'Child 2', //节点name字段的值 description: 'Description 2', //节点description字段的值 leaf: true }] } });
树的根节点(Root)可以晚绑定,也就是在创建树时不配置树的根节点,等树创建完以后再给树添加根节点。
var tree = Ext.create('Ext.tree.Panel'); //创建空树,该树没有添加节点数据 tree.setRootNode({ //通过setRootNode方法给树添加根节点 text: 'Root', //根节点显示文字 expanded: true, children: [{ //根节点的子节点数组 text: 'Child 1', leaf: true }, { text: 'Child 2', leaf: true }] }); //附加子节点 var root = tree.getRootNode(); //获取树的根节点 var parent = root.appendChild({ //在根节点中添加父节点 text: 'Parent 1' }); parent.appendChild({ //在父节点中添加子节点 text: 'Child 3', leaf: true }); //插入子节点 var child = parent.insertChild(0, { //在第一个位置插入子节点 text: 'Child 2.5', leaf: true }); parent.insertBefore({ //在child节点前面插入节点 text: 'Child 2.75', leaf: true }, child);