2012-02-14 1 views
3

私はセル編集のグリッドを持っています。誰かがcelleditorでenterを押すと、extjsは次の行と同じセルでエディタを開く必要があります。 私が知っているのは、このアクションはCellEditingクラスのstartEdit()メソッドです。しかし、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

あなたは、あなたのプラグインにのPluginIDを割り当てた提供getPlugin methodを経由してプラグインにアクセスすることができます。ここでは

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のリスナーの内部で? –

0

通常、私がやっていることはちょうどこのようなセル編集プラグインへの参照を格納します

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

その後、あなたは、このようなグリッドに割り当てることができます。

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

次に、必要なときあなたが呼び出すことができる編集を開始するmyGrid.cellEditor.startEdit(colNumber)