2012-02-14 50 views
3

我有單元格編輯的網格。當某人按下進入celleditor時 - extjs需要在下一行和同一單元格中打開編輯器。 我知道,這個動作確實是startEdit() CellEditing類的方法。但是如何從CellEditor的監聽器訪問該網格的CellEditing。從編輯器監聽器中取出CellEditing插件

listeners:{ 
    specialkey: function(field, e){ 
     if (e.getKey() == e.ENTER) { 
      var grid = Ext.getCmp('sheetproductionrestin'); 
      var store = Ext.getCmp('sheetproductionrestin').store; 
      var selModel = grid.getSelectionModel(); 
      var selectedRecord = selModel.getLastSelected(); 

      var recordIndex = store.indexOf(selectedRecord); 
      var nextRecord = store.getAt(recordIndex + 1); 
      selModel.select(nextRecord); 
     } 
    } 
} 

此代碼使下一行成爲焦點,但是如何訪問編輯插件並從此處調用StartEdit?

回答

3

您可以通過getPlugin method假如您已指定pluginId到您的插件訪問插件:

var grid = Ext.create('Ext.grid.Panel',{ 
    plugins: [Ext.create('Ext.grid.plugin.CellEditing', { 
     clicksToEdit: 2, 
     pluginId: 'cellplugin' 
    })], 
    columns: [ 
     { 
     header: 'Name', 
     dataIndex: 'name', 
     editor: { 
      xtype: 'textfield', 
      listeners: { 
       specialkey: function(field, e) { 
        if (e.getKey() == e.ENTER) { 
         var grid = Ext.getCmp('sheetproductionrestin'); 
         var store = Ext.getCmp('sheetproductionrestin').store; 
         var selModel = grid.getSelectionModel(); 
         var selectedRecord = selModel.getLastSelected(); 

         var recordIndex = store.indexOf(selectedRecord); 
         var nextRecord = store.getAt(recordIndex + 1); 
         selModel.select(nextRecord); 

         var plugin = grid.getPlugin('cellplugin'); 
         plugin.startEdit(nextRecord, grid.columns[0]); 
        } 
       } 
      } 
     }}, 
     // ... 
    ], 
    // ... 
}); 

這裏是jsfiddle(第一列是可編輯的)。

+0

你碰巧知道如何做相反的?在cellplugin的偵聽器中獲取對正在創建的實際字段的引用以進行編輯? – 2016-07-21 19:21:38

0

通常我做什麼,只是存儲在單元格編輯插件,這樣的引用:當你需要

var myGrid = Ext.create('Ext.grid.Panel',{ 
    plugins: [myGrid.cellEditor] 

然後:

myGrid.cellEditor = Ext.create('Ext.grid.plugin.CellEditing'); 

然後你就可以將它分配給電網這樣開始編輯,你可以撥打電話myGrid.cellEditor.startEdit(colNumber)