Старый вопрос, я знаю, но для решения этой проблемы вы можете удалить панель инструментов из списка (не уничтожая ее) и добавить ее на панель над списком.Все функциональные возможности nestedList остаются неизменными на панели инструментов.Вот решение, которое у меня есть:
Сначала я создал представление, которое выходит из NestedList и содержит панель инструментов:
Ext.define('MyApp.view.DynamicList', {
extend: 'Ext.dataview.NestedList',
alias: 'widget.dynamiclist',
config: {
toolbar: {
xtype: 'toolbar',
docked: 'top',
itemId: 'header-bar',
layout: {
pack: 'end',
type: 'hbox'
},
items: [
{
xtype: 'spacer'
},
{
xtype: 'button',
itemId: 'show-nav-sheet-button',
ui: 'plain',
width: 45,
iconCls: 'more'
}
]
}
}
});
Затем я создал основную панель с макетом vbox, который содержитдочерняя панель и эта панель инструментов:
Ext.define('MyApp.view.MainContainer', {
extend: 'Ext.Container',
requires: [
'MyApp.view.DynamicList'
],
config: {
id: 'main-container',
layout: {
type: 'vbox'
},
items: [
{
xtype: 'panel',
flex: 1,
itemId: 'info-container'
},
{
xtype: 'dynamiclist',
flex: 1
}
]
}
});
Затем в контроллере я прослушиваю событие инициализации вложенного списка.Когда он запущен, я удаляю панель инструментов из вложенного списка и добавляю ее на панель.
onNestedListInitialize: function() {
// need to wait until everythin is initialized;
var me = this;
var renderFn = function renderPanels() {
var main = me.getMainContainer();
// wait until main is intialized;
if(!main) {
Ext.defer(renderFn, 50, this);
return;
}
var list = main.down('#my-list');
var infocont = main.down('#info-container');
// wait until the container's components are initialized
if(!list || !infocont) {
Ext.defer(renderFn, 50, this);
return;
}
// remove the toolbar from the list, and add it to the container.
var toolbar = list.down('#header-bar');
list.remove(toolbar, false);
infocont.add(toolbar);
}
// call the function for the first time.
renderFn();
}
Обратите внимание, мне пришлось добавить несколько проверок, чтобы убедиться, что компоненты были правильно инициализированы перед их использованием, но суть этого заключается в list.remove (панель инструментов, false), за которым следует инфоконт.add (панель инструментов) команды.Флаг false в методе .remove () означает, что элемент не будет уничтожен, поэтому он доступен для повторного добавления на панель.