Ext JS 4.1获取itemcontextmenu中的列索引

时间:2012-06-28 10:50:26

标签: extjs4.1

当我为grid / Tree的itemcontextmenu添加监听器时,我能够访问视图记录,项目,索引,但是如何获取列?

我想要创建的是contextMenu,但前提是用户点击第一列中的项目。

这是我的听众功能:

firstColumnContext: function(view,record,item,index,e,eOpts) {
        console.log(view);
        console.log(record.getName());//this works
        console.log(index);
        console.log('get column');//
},

我的概念如下:

firstColumnContext: function(view,record,item,index,e,eOpts) {
        e.stopEvent();
        if(record.get('leaf') && 'first column')
        {
                //show context menu here
        }
},

但正如我之前所写,我需要验证右键是否在第一列。

2 个答案:

答案 0 :(得分:2)

请参阅此代码,设置您的网格viewConfig,如下所示:

viewConfig: {
            listeners:{
                beforecellcontextmenu: function(view, tableCell, columnIndex, record, tableRow, rowIndex){
                    //your menu code here

                },
                itemcontextmenu: function(view,record,item,index,e,eOpts){
                    e.stopEvent();
                }
            }
        }

列索引由beforecellcontextmenu事件提供,但不会触发事件本身不提供事件,因此您必须使用两个事件的组合,一个用于停止默认菜单,另一个用于在你希望它展示的情况。

答案 1 :(得分:2)

我也有这个问题。这是我为网格设计的黑客工作得很好。它将点击时的鼠标位置与每列的位置进行比较,并找出它们何时重叠。

grid.on('itemcontextmenu', function(view, record, item, index, e) {

    var xPos = e.getXY()[0];
    var cols = view.getGridColumns();

    for(var c in cols) {

        var leftEdge = cols[c].getPosition()[0];
        var rightEdge = cols[c].getSize().width + leftEdge;

        if(xPos>=leftEdge && xPos<=rightEdge) {
            console.log(cols[c].dataIndex);
        }
    }
});