Уже существующий грид отобразить в уже существующей панели
Существует такой грид и такой layout:
var grid = new Ext.grid.GridPanel({ frame:true, title: 'Movie Database', height:200, width:800, store: store, columns: [ {header: "Cover", renderer: cover_image}, {header: "Title", dataIndex: 'title', renderer: title_tagline, sortable: true}, {header: "Director", dataIndex: 'director'}, {header: "Released", dataIndex: 'released', renderer: Ext.util.Format.dateRenderer('d.m.Y')}, {header: "Genre", dataIndex: 'genre', renderer: genre_name}, {header: "Tagline", dataIndex: 'tagline'} ] }); var viewport = new Ext.Viewport({ layout: 'border', renderTo: Ext.getBody(), items: [{ region: 'north', xtype: 'panel', collapsible: true, html: 'North' },{ region: 'west', xtype: 'panel', split: false, width: 200, collapsible: true, html: 'West' },{ region: 'center', xtype: 'panel', collapsible: true, },{ region: 'east', xtype: 'panel', split: false, width: 200, collapsible: true, html: 'East' },{ region: 'south', xtype: 'panel', html: 'South' }] }); Нужно вставить грид в панель, помещенную в region: 'center'. Для этого нужно, как я понимаю, свойству renderTo грида присвоить идентификатор панели: var grid = new Ext.grid.GridPanel({ renderTo: идПанели, ...А как задать этот идентификатор? Другой вариант в contentEl панели поместить идентификатор грида: { region: 'center', xtype: 'panel', collapsible: true, contentEl: идГрида } Но опять же, как его задать? Я надеялся, что прокатит такое: contentEl: grid Но так не работает. Видимо можно при создании элемента, указать у него какое-то свойство, значение которого потом можно указать в renderTo или contentEl, но я не нашёл такого в документации. |
viewport.add(grid); |
Эффект тот же, как если бы я написал
var grid = new Ext.grid.GridPanel({ renderTo: document.body, Грид выводится поверх всего независимо от layout-а. А надо чтобы он был внутри этого { region: 'center', xtype: 'panel', collapsible: true } |
{ region: 'center', xtype: 'panel', collapsible: true, id: 'someId', layout: 'fit' } Ext.getCmp('someId').add(grid)Типа такого, например. |
Так заработало.
Спасибо! |
А не подскажете, почему аналогично не вставляется в панель дерево?
var treeLoader = new Ext.tree.TreeLoader({ dataUrl: 'get-nodes.php' }); var rootNode = new Ext.tree.AsyncTreeNode({ text: 'Root' }); var tree = new Ext.tree.TreePanel({ loader: treeLoader, root: rootNode }); var viewport = new Ext.Viewport({ layout: 'border', renderTo: Ext.getBody(), items: [{ region: 'north', xtype: 'panel', collapsable: true },{ region: 'center', xtype: 'panel' },{ region: 'west', xtype: 'panel', id: 'treecontainer', layout: 'fit', width: 300 },{ region: 'east', xtype: 'panel', width: 300 }] }); Ext.getCmp('treecontainer').add(tree);Никаких ошибок не выдаётся, но и дерево не появляется. Если помещать дерево в див через renderTo: 'divId', то всё нормально. |
Если инициализировать дерево через xtype: 'treepanel', то тоже всё нормально. Просто уже созданный TreePanel тоже должен как-то вставлятся.
Правда, пишут, что xtype всегда предпочтительней, потому что такая инициализация ленивая. Если мы, допустим, ни разу не открыли вкладку, на которой то же дерево, то его объект ни разу не создастся. |
А, doLayout() забыл.
|
Часовой пояс GMT +3, время: 04:09. |