Grid提供了四個與右鍵功能有關的event,包含contextmenu、cellcontextmenu、以及headercontextmenu,說明分別如下:
由於Browser本身就具有右鍵功能,所以在自訂右鍵功能時,必須使用preventDefault防止發生Browser的預設事件動作。
contextmenu(Ext.ExentObject e)
The raw contextmenu event for the entire grid.
cellcontextmenu(Grid this, Number rowIndex, Number cellIndex, Ext.EventObject e)
Fires when a cell is right clicked。
範例為顯示使用者對哪個cell按下右鍵。
var headerMenu = new Ext.menu.Menu({
items: [{
text: 'show index(row, col)',
handler: function(item, event) {
alert(headerMenu.cellSelected.row +
' ' + headerMenu.cellSelected.column);
}
}]
});
grid.on('cellcontextmenu', function(grid, rowIndex, columnIndex, e) {
e.preventDefault();
// 將點選的cell資訊存放於此
headerMenu.cellSelected = {'row': rowIndex, 'column': columnIndex};
headerMenu.showAt(e.getXY());
});
rowcontextmenu(Grid this, Number rowIndex, Ext.EventObject e)
Fires when a row is right clicked。
我將舉刪除某列為範例說明。由於menu的handler並不能直接得知目前選到的row index,所以必須在rowcontextmenu event中,先將row index存起來,在menu的handler中讀取,才能得知目前選到的row。
var rowMenu = new Ext.menu.Menu(
items: [{
text: 'delete',
handler: function(item, event) {
var rec = store.getAt(grid.rowContextIndex);
store.remove(rec);
}
}]
});
grid.on('rowcontextmenu', function(grid, rowIndex, e) {
e.preventDefault();
grid.getSelectionModel().selectRow(rowIndex);
grid.rowContextIndex = rowIndex; // 將點選的row資訊存放於此
rowMenu.showAt(e.getXY());
});
headercontextmenu(Grid this, Number columnIndex, Ext.EventObject e)
Fires when a header is right clicked。
例子為顯示使用者對哪個header按下右鍵。
var headerMenu = new Ext.menu.Menu({
items: [{
text: 'show column index',
handler: function(item, event) {
alert(grid.headerContextId);
}
}]
});
grid.on('headercontextmenu', function(grid, columnIndex, e) {
e.preventDefault();
var cm = grid.getColumnModel();
// 將點選的column資訊存放於此
grid.headerContextId = cm.getDataIndex(columnIndex);
headerMenu.showAt(e.getXY());
});

沒有留言:
張貼留言