我正在尝试在网格标题中创建一个带有一些子菜单的菜单,但现在显示了子菜单项。以下是我在getColumnMenu()
中覆盖Ext.grid.header.Container
的方式:
Ext.override(Ext.grid.header.Container, {
/**
* Returns an array of menu CheckItems corresponding to all immediate children of the passed Container which have been configured as hideable.
*/
getColumnMenu: function (headerContainer) {
// debugger
var xmenu = new Ext.menu.Menu({
style: {
overflow: 'visible'
},
items: [{
text: 'Category 1',
menu: [{
text: 'Item 1.1',
checked: true,
checkHandler: this.onColumnCheckChange
}, {
text: 'Item 1.2',
checked: false,
checkHandler: this.onColumnCheckChange
}]
}, {
text: 'Category 2',
menu: [{
text: 'Item 2.1',
checked: true,
checkHandler: this.onColumnCheckChange
}, {
text: 'Item 2.1',
checked: false,
checkHandler: this.onColumnCheckChange
}]
}]
});
var test = [];
xmenu.items.each(function (item) {
test.push(item);
});
return test;
}
});
显示菜单类别1和类别2:
但是当我尝试显示他们的子菜单时,我收到一个错误:
以某种方式是菜单parentMenu
的{{1}}属性。有什么建议吗?
答案 0 :(得分:2)
老实说,我不太清楚为什么你的代码不起作用。我只是试图组织菜单和菜单项的创建,它工作。我使用了以下代码
getColumnMenu: function(headerContainer) {
var menuItems = [];
/* CATEGORY 1 */
var itemsOneMenu = Ext.create('Ext.menu.Menu', {
items: [{
text: 'Item 1.1',
checked: true,
checkHandler: this.onColumnCheckChange
},{
text: 'Item 1.2',
checked: false,
checkHandler: this.onColumnCheckChange
}]
});
categoryOneMenuItem = Ext.create('Ext.menu.Item', {
text: 'Category 1',
hideOnClick: false,
menu: itemsOneMenu
});
/* CATEGORY 2 */
var itemsTwoMenu = Ext.create('Ext.menu.Menu', {
items: [{
text: 'Item 2.1',
checked: true,
checkHandler: this.onColumnCheckChange
},{
text: 'Item 2.1',
checked: false,
checkHandler: this.onColumnCheckChange
}]
});
categoryTwoMenuItem = Ext.create('Ext.menu.Item', {
text: 'Category 2',
hideOnClick: false,
menu: itemsTwoMenu
});
menuItems.push(categoryOneMenuItem,categoryTwoMenuItem);
return menuItems;
}
您可以在此处找到正在运行的示例http://jsfiddle.net/alexrom7/xheHn/。唯一的观察是EXT将继续收听CheckItem checkchange事件以显示或隐藏所选列。