Ext.tree.Panel наследуется от Ext.panel.Table, поэтому есть поддержка столбцов. Дереву нужен специальный стор типа Ext.Store.TreeStore.
var store = Ext.create('Ext.data.TreeStore', { root: { expanded: true, text: 'Continents', children: [{ text: 'Antarctica', leaf: true }, { text: 'South America', expanded: true, children: [{ text: 'Brazil', leaf: true }, { text: 'Chile', leaf: true }] }, { text: 'Asia', expanded: true, children: [{ text: 'India', leaf: true }, { text: 'China', leaf: true }] }, { text: 'Africa', leaf: true }] } });
Пример простого дерева:
Ext.create('Ext.tree.Panel', { title: 'Basic Tree', width: 200, height: 450, store: store, rootVisible: true, renderTo: Ext.getBody() });
Поддержка drag and drop реализуется с помощью плагина treeviewdragdrop:
var store = Ext.create('Ext.data.TreeStore', { root: { expanded: true, text: 'Continents', checked: false, children: [{ text: 'Antarctica', leaf: true, checked: false }, { text: 'South America', expanded: false, checked: true, children: [{ text: 'Chile', leaf: true, checked: true }] }, { text: 'Asia', expanded: true, checked: true, children: [{ text: 'India', leaf: true, checked: true }, { text: 'China', leaf: true, checked: true }] }, { text: 'Africa', leaf: true, checked: true }] } }); Ext.create('Ext.tree.Panel', { title: 'Basic Tree', width: 200, height: 450, store: store, rootVisible: true, useArrows: true, lines: false, renderTo: Ext.getBody(), viewConfig: { plugins: { ptype: 'treeviewdragdrop', containerScroll: true } } });
В дерево можно добавлять столбцы. По умолчанию в дереве один столбец для которого используется текстовое поле чтобы отображать узлы.
var store = Ext.create('Ext.data.TreeStore', { root: { expanded: true, text: 'Continents', children: [{ name: 'Antarctica', population: 0, area: 14, leaf: true }, { name: 'South America', population: 385, area: 17.84, expanded: false, children: [{ name: 'Chile', population: 18, area: 0.7, leaf: true, }] }, { name: 'Asia', expanded: true, population: 4164, area: 44.57, children: [{ name: 'India', leaf: true, population: 1210, area: 3.2 }, { name: 'China', leaf: true, population: 1357, area: 9.5 }] }, { name: 'Africa', leaf: true, population: 1110, area: 30 }] } });
Как и у грида столбцы дерева могут быть любого типа (checkbox, picture, button, URL, ...).
Ext.create('Ext.tree.Panel', { title: 'Tree Grid', width: 500, height: 450, store: store, rootVisible: false, useArrows: true, lines: false, scope: this, renderTo: Ext.getBody(), columns: [{ xtype: 'treecolumn', text: 'Name', flex: 1, sortable: true, dataIndex: 'name' }, { text: 'Population (millons)', sortable: true, width: 150, dataIndex: 'population' }, { text: 'Area (millons km^2)', width: 150, sortable: true, dataIndex: 'area' }], });