0

当我为网格/树的 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
        }
},

但正如我之前写的那样,我需要验证右击是否在第一列。

4

2 回答 2

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 事件提供,但触发的事件不提供事件本身,因此您必须结合使用这两个事件,一个停止默认菜单,另一个在您想要的情况下弹出它它显示。

于 2012-06-29T15:28:22.887 回答
2

我也有这个问题。这是我为 Grids 设计的 hack,效果很好。它将单击时的鼠标位置与每列的位置进行比较,并找出它们何时重叠。

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);
        }
    }
});
于 2014-01-17T18:57:07.587 回答