3

我有一个网格,我需要可点击的行 - 单击一行时应该打开一个新窗口。但我想添加一个带有删除图标的操作列,它会在单击时删除该行。问题是当点击动作列中的图标时,与该行相关的动作也会被触发并打开新窗口。我需要找到一种方法,如何在单击操作列时触发一个操作,并在单击该行的其余部分时触发另一个操作。请问有什么想法吗?

也许类似于以下伪代码:

grid.on('itemclick', function(grid, rowIndex, columnIndex, e) {
    if (action column clicked) { // do something }
    else { // do something else }
}, this);

...但是我如何检测到操作列被点击了?谢谢你。

4

3 回答 3

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

看起来这个事件没有记录,但这里的文档中有一个私有方法

参考:ExtJS 4 - Grid - 禁用特定列的行选择

于 2012-09-03T10:42:36.347 回答
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);
于 2014-09-01T12:11:32.503 回答
0

你试过了吗Ext.EventObject#stopPropagation()Ext.EventObject#stopEvent()

您可以将其添加到您的操作列处理程序中:

e.stopPropagation();

这样网格的itemclick事件就不会触发。

于 2012-09-03T05:37:40.180 回答