我试图用表格中的列列表制作一个下拉按钮。我创建了这个代码,但问题是,当代码执行时,this
中还没有列,所以数组是empty
。按钮生成,但没有任何选项。解决方案是添加setTimeout
,数据到达,但是按钮没有出现,因为应用程序已经呈现了它所在的容器。第二件事,setTimeout
不是一个很好的解决方案。
Ext.define('ExtModules.ToolbarItems.ManageColums', {
extend: 'Ext.form.Panel',
mixins: { formFields: 'ExtModules.Components.GenericForm' },
manageColumns() {
// this.getColumns is []
const columnMenuItems = this.getColumns().map((column) => {
console.log(column)
return {
xtype: 'menucheckitem',
text: column.text,
checked: true,
handler: (item) => {
const dataIndex = column.dataIndex;
const columnInstance = this.getColumnManager().getHeaderByDataIndex(dataIndex);
if (columnInstance) {
columnInstance.setVisible(item.checked);
}
},
};
});
return Ext.create('Ext.button.Button', {
text: 'Columns',
menu: Ext.create('Ext.menu.Menu', {
items: columnMenuItems,
}),
});
},
})
字符串
...
Ext.define('ExtModules.Helpers.ToolbarHelper', {
mixins: {
...
manageColumns: 'ExtModules.ToolbarItems.ManageColums',
...
},
requires: ['Ext.ux.exporter.Exporter'],
setUpExtensionBar(extensions, position) {
const extensionBar = Ext.create('Ext.toolbar.Toolbar', {
layout: {
type: 'hbox',
pack: 'start',
align: 'stretch',
},
// height: 40,
dock: position || 'top',
items: extensions,
})
this.addDocked(extensionBar)
},
...
型
...
Ext.define('ExtModules.Base.DashboardModule', {
mixins: {
extensions: 'ExtModules.ToolbarItems.SettingsEditor',
toolbarHelper: 'ExtModules.Helpers.ToolbarHelper',
}, .....
型
我当前的用例
Ext.define('ExtModules.ToolbarItems.ManageColums', {
xtype: 'managecolumns',
manageColumns() {
const button = {
xtype: 'button',
name: 'Manage',
text: 'Manage Columns',
handler: (btn, e) => {
if (btn.menu.items.length === 0) {
const menuItems = this.createList()
btn.menu.removeAll()
btn.menu.add(menuItems)
btn.showMenu()
}
},
menu: {
xtype: 'menu',
items: [],
}
};
return button
},
createColumnMenuItems(button) {
const menuItems = this.createList();
const newMenu = Ext.create('Ext.menu.Menu', {
items: this.createColumnMenuItems(menuItems),
});
button.setMenu(newMenu);
},
createList() {
const columns = this.getColumnManager().getColumns();
return columns.map((column) => ({
xtype: 'menucheckitem',
text: column.text,
checked: true,
cls: 'toolbar-helper__custom-checkbox-menu-item',
handler: (item) => {
const dataIndex = column.dataIndex;
const columnInstance = this.getColumnByDataIndex(dataIndex);
if (columnInstance) {
columnInstance.setVisible(item.checked);
}
},
}));
},
getColumnByDataIndex(dataIndex) {
const columnManager = this.getColumnManager();
const targetColumn = columnManager.getColumns().find((column) => column.dataIndex === dataIndex);
return targetColumn;
},
getColumnManager() {
return this.getHeaderContainer().getHeaderAtIndex(0);
},
})
/* toolbar.js
Ext.define('ExtModules.Helpers.ToolbarHelper', {
mixins: {
...
manageColumns: 'ExtModules.ToolbarItems.ManageColumns',
},
requires: ['Ext.ux.exporter.Exporter'],
*/
型
有人能帮我吗?我真的不知道怎么修
1条答案
按热度按时间1tuwyuhd1#
请根据您的用例检查以下示例,
字符串