Для этого пришлось разобраться с новой системой обращения к частям грида и воспользоваться непосредственно манипуляциями с DOM:

  1. Ext.create('Ext.data.Store', {
  2. storeId:'employeeStore',
  3. fields:['firstname', 'lastname', 'senority', 'dep', 'hired'],
  4. data:[
  5. {firstname:"Michael", lastname:"Scott"},
  6. {firstname:"Dwight", lastname:"Schrute"},
  7. {firstname:"Jim", lastname:"Halpert"},
  8. {firstname:"Kevin", lastname:"Malone"},
  9. {firstname:"Angela", lastname:"Martin"}
  10. ]
  11. });
  12.  
  13. var toggleIcons = function(grid, rowIndex, colIndex, firstAction) {
  14. var actions = { indexes: {show : 0, hide : 1}, acts: ['show', 'hide'] };
  15. var rec = grid.getStore().getAt(rowIndex);
  16. var col = grid.getHeaderCt().getHeaderAtIndex(colIndex);
  17. var el = grid.getCell(rec, col).child('div');
  18. var index = actions.indexes[firstAction];
  19. var a = actions.acts;
  20. el.child('img')[a[index]]().next('img')[a[1 - index]]();
  21. }
  22.  
  23. Ext.create('Ext.grid.Panel', {
  24. title: 'Action Column Demo',
  25. store: Ext.data.StoreManager.lookup('employeeStore'),
  26. columns: [
  27. {text: 'First Name', dataIndex:'firstname'},
  28. {text: 'Last Name', dataIndex:'lastname'},
  29. {
  30. xtype:'actioncolumn',
  31. width:50,
  32. items: [{
  33. icon: 'extjs/examples/shared/icons/fam/cog_edit.png', // Use a URL in the icon config
  34. tooltip: 'Edit',
  35. handler: function(grid, rowIndex, colIndex) {
  36. toggleIcons(grid, rowIndex, colIndex, 'hide');
  37. }
  38. },{
  39. icon: 'extjs/examples/restful/images/delete.png',
  40. tooltip: 'Delete',
  41. hidden: true,
  42. handler: function(grid, rowIndex, colIndex) {
  43. toggleIcons(grid, rowIndex, colIndex, 'show');
  44. }
  45. }]
  46. }
  47. ],
  48. width: 250,
  49. renderTo: Ext.getBody()
  50. });
  51.  


Это немного измененный пример из документации самого экста, куда я добавил свою функцию. Для полной визуальной корректности стоит задать для второй иконки класс iconCls, в котором для нее будет прописано что-то с visibility: hidden (именно так по умолчанию отрабатывает hide). Ну и да, чтобы не повторять аргументы в вызове toggleIcons, можно не описывать их в хендлере, делать [].slice.call(arguments, 0), добавлять в конец параметр действия и вызывать toggleIcons.apply(this, args);