Ext.create('Ext.data.Store', { storeId:'employeeStore', fields:['firstname', 'lastname', 'senority', 'dep', 'hired'], data:[ {firstname:"Michael", lastname:"Scott"}, {firstname:"Dwight", lastname:"Schrute"}, {firstname:"Jim", lastname:"Halpert"}, {firstname:"Kevin", lastname:"Malone"}, {firstname:"Angela", lastname:"Martin"} ] }); var toggleIcons = function(grid, rowIndex, colIndex, firstAction) { var actions = { indexes: {show : 0, hide : 1}, acts: ['show', 'hide'] }; var rec = grid.getStore().getAt(rowIndex); var col = grid.getHeaderCt().getHeaderAtIndex(colIndex); var el = grid.getCell(rec, col).child('div'); var index = actions.indexes[firstAction]; var a = actions.acts; el.child('img')[a[index]]().next('img')[a[1 - index]](); } Ext.create('Ext.grid.Panel', { title: 'Action Column Demo', store: Ext.data.StoreManager.lookup('employeeStore'), columns: [ {text: 'First Name', dataIndex:'firstname'}, {text: 'Last Name', dataIndex:'lastname'}, { xtype:'actioncolumn', width:50, items: [{ icon: 'extjs/examples/shared/icons/fam/cog_edit.png', // Use a URL in the icon config tooltip: 'Edit', handler: function(grid, rowIndex, colIndex) { toggleIcons(grid, rowIndex, colIndex, 'hide'); } },{ icon: 'extjs/examples/restful/images/delete.png', tooltip: 'Delete', hidden: true, handler: function(grid, rowIndex, colIndex) { toggleIcons(grid, rowIndex, colIndex, 'show'); } }] } ], width: 250, renderTo: Ext.getBody() });
Это немного измененный пример из документации самого экста, куда я добавил свою функцию. Для полной визуальной корректности стоит задать для второй иконки класс iconCls, в котором для нее будет прописано что-то с visibility: hidden (именно так по умолчанию отрабатывает hide). Ну и да, чтобы не повторять аргументы в вызове toggleIcons, можно не описывать их в хендлере, делать [].slice.call(arguments, 0), добавлять в конец параметр действия и вызывать toggleIcons.apply(this, args);