Ext JS 4:grid - 在点击动作列时对itemclick和不同动作的一些动作

时间:2012-09-03 00:40:04

标签: extjs extjs4

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

可能类似于遵循伪代码:

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

...但是如何检测到已点击操作列? 谢谢。

3 个答案:

答案 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);