В небольшой программе, которую у меня есть, я пытаюсь создать пользовательские контейнеры для каждого листового узла моего вложенного списка. Вот несколько примеров произвольных контейнеров, которые я пытаюсь проверить с:Изменение контейнера деталей в NestedList?
Ext.define('DetailContainer1', { extend: 'Ext.Container', xtype: 'detail-container1', layout: { type: 'vbox' }, height: 300, style: 'background-color: #a9a9a9;', // flex: 1, items: [ {html: 'Detail Container1'} ] }); Ext.define('DetailContainer2', { extend: 'Ext.Container', xtype: 'detail-container2', layout: { type: 'vbox' }, height: 300, style: 'background-color: #c9c9c9;', // flex: 1, items: [ {html: 'Detail Container2', flex: 1}, {xtype: 'button', text: 'Hit me!', flex: 1} ] });
Как я могу перейти в новых контейнерах, когда пользователь нажимает на листовом узле? Это действие должно происходить в onLeafItemTap(). Btw, начальный контейнер (# 2) в данный момент не отображается. Это вопрос макета? Вот некоторые идеи о том, что экран должен выглядеть следующим образом:
Полный источник:
Ext.Loader.setConfig({ enabled: true }); Ext.define('DetailContainer1', { extend: 'Ext.Container', xtype: 'detail-container1', layout: { type: 'vbox' }, height: 300, style: 'background-color: #a9a9a9;', // flex: 1, items: [ {html: 'Detail Container1'} ] }); Ext.define('DetailContainer2', { extend: 'Ext.Container', xtype: 'detail-container2', layout: { type: 'vbox' }, height: 300, style: 'background-color: #c9c9c9;', // flex: 1, items: [ {html: 'Detail Container2', flex: 1}, {xtype: 'button', text: 'Hit me!', flex: 1} ] }); Ext.define('ListItem', { extend: 'Ext.data.Model', config: { fields: ['text'] } }); Ext.define('Sencha.view.MainView', { extend: 'Ext.Container', xtype: 'mainview', layout: { type: 'hbox' }, initialize: function() { this.treeStore = Ext.create('Ext.data.TreeStore', { model: 'ListItem', defaultRootProperty: 'items', root: { items: [ { text: 'Containers', items: [ { text: 'Detail #1', leaf: true }, { text: 'Detail #2', leaf: true } ] } ] } }); this.detailContainer = Ext.create("DetailContainer2", {}); this.nestedList = Ext.create('Ext.NestedList', { docked: 'left', width: 300, flex: 1, store: this.treeStore, detailCard: true, detailContainer: this.detailContainer, listeners: { scope: this, leafitemtap: this.onLeafItemTap } }); this.setItems([this.detailContainer, this.nestedList]); }, onLeafItemTap: function(nestedList, list, index, node, record, e) { var detailCard = nestedList.getDetailCard(); // nestedList.setDetailContainer(Ext.create("DetailContainer1", {})) // detailCard.setHtml(record.get('text') + "..."); } }); Ext.application({ launch: function() { Ext.Viewport.add( Ext.create("Ext.Container", { layout: { type: 'hbox' }, items: [ { xtype : 'mainview'} ] })); } });
Вы хотите иметь пользовательский 'detailContainer' и отображать его в правой части экрана? –
Да, в первом разделе кода я показываю два простых примера. Одновременно показывался только один. –