0

我花了过去 3 个小时试图在 Grid 内创建一个菜单(请参阅 img: Menu inside a grid)。但是对于我的生活,我无法handlers在菜单内工作。

编辑(澄清):我希望在网格内的每个记录行上为操作图标留出更多空间。因此,为了创造额外的空间,我想onClick在每个网格行内都有一个菜单(见图),这将允许我在下拉菜单中添加无限的操作图标。

我创建了这样的菜单(我认为这是不对的,但我不知道该怎么做):

ux.RGridPanel = Ext.extend(Ext.grid.GridPanel, {
    newMenu: new Ext.menu.Menu({
        id: 'mainMenu',
        style: {
            overflow: 'visible'     // For the Combo popup
        },
        items: [
            {
                text: 'I like Ext',
                checked: true       // when checked has a boolean value, it is assumed to be a CheckItem
            },
            {
                iconCls: 'sitemap_16',
                text: 'Test 2',
                tooltip: '',
                handler: function(a,b){
                    console.log(this.ownerCt); //All this stuff is not working
                    console.log(a);
                    console.log( this.parent);
                    this.parent.showSelectDialog //This is what is causing me issues, this won't work.
                }
            },
            [...]
        ]
    });

我试图在里面调用一个处理程序RGridPanel

showSelectDialog: function(grid, rowIndex, colIndex) {}

我想在里面使用不错的方法,RGridPanel所以我不需要传递参数。谁能指出我正确的方向来解决这个问题?!

编辑::: 我自己在里面使用它已经走得更远了GridPanel

loadMenu: function(){ 
    return new Ext.menu.Menu({
        scope:this,
        id: 'mainMenu',
        style: {
            overflow: 'visible'     // For the Combo popup
        },
        items: [
            {
                iconCls: 'sitemap_16',
                text: 'Test 2',
                handler:this.showSelectImportFileDialog, //this works, but it does not pass the required params

initComponent: function() {
    this.newMenu = this.loadMenu();

cog图标上:

  handler: function (view, record, el, i, e) {
      view.newMenu.showAt(e.getXY());
  },

我现在可以调用showSelectDialog,但默认参数 ((grid, rowIndex, colIndex)不起作用。因为我showSelectDialog从菜单内部调用。

4

1 回答 1

-1

当您显示菜单时,您可以提供一些信息,如下所示:

handler: function(grid, rowIndex, colIndex, item, e) {
    grid.newMenu.cfg = {
        grid: grid,
        rowIndex: rowIndex,
        colIndex: colIndex,
        whatever: null
    };
    grid.newMenu.showAt(e.getXY());
}

然后在菜单处理程序中使用它:

handler: function(){
    var menu = this.ownerCt;
    var cfg = menu.cfg;

    console.log(cfg);
}

工作样本:http: //jsfiddle.net/8KJ36/2/

于 2013-11-18T12:18:58.313 回答