在打开onClick的网格内创建一个菜单

时间:2013-11-15 09:03:54

标签: javascript extjs extjs3

我花了最后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中使用漂亮的方法,所以我不需要传递参数。任何人都可以指出我正确的方向来解决这个问题吗?!

EDIT ::: 在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

1 个答案:

答案 0 :(得分:0)

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

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/