我有一个网格,我需要可点击的行 - 单击一行时应该打开一个新窗口。但我想添加一个带有删除图标的操作列,该列将删除单击时的行。问题是,当单击操作列中的图标时,也会触发与该行相关的操作,并打开新窗口。我需要找到一种方法,在单击操作列时触发一个操作,在单击其余部分时触发另一个操作。有什么想法吗?
可能类似于遵循伪代码:
grid.on('itemclick', function(grid, rowIndex, columnIndex, e) {
if (action column clicked) { // do something }
else { // do something else }
}, this);
...但是如何检测到已点击操作列? 谢谢。
答案 0 :(得分:7)
而不是:
grid.on('itemclick', function(grid, rowIndex, columnIndex, e) {
if (action column clicked) { // do something }
else { // do something else }
}, this);
使用此:
grid.getView().on('cellmousedown',function(view, cell, cellIdx, record, row, rowIdx, eOpts){
//itemclick logic
});
如果是actioncolumn,则不会触发此事件。所以你不需要if - else
看起来这个事件没有记录,但文档中有一个私有方法here
参考:ExtJS 4 - Grid - Disable rowselection for specific column
答案 1 :(得分:0)
您是否尝试过Ext.EventObject#stopPropagation()
或Ext.EventObject#stopEvent()
?
您可以将其添加到操作列管理程序:
中 e.stopPropagation();
这样,网格的itemclick
事件就不会触发。
答案 2 :(得分:0)
无需更改事件类型即可更直接地回答您的问题:
grid.on('itemclick', function(grid, rowIndex, columnIndex, e) {
var columnType = grid.panel.columns[columnIndex].xtype;
if (columnType === 'actioncolumn') {
// it's action column!
} else {
// it's NOT action column!
}
}, this);