当我为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
}
},
但正如我之前所写,我需要验证右键是否在第一列。
答案 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);
}
}
});