2013-07-22 1 views
5

Ich benutze ExtJS 4.2.1 und habe eine ziemlich einfache Einrichtung: JSON-basierten Speicher und ein Gridpanel, das aus diesem Speicher liest. Das Klick-Ereignis einer Add-Schaltfläche ruft die folgende Funktion auf.Toggle-Zelle-Editor nach Datensatz programmgesteuert zum Gitter in ExtJS hinzugefügt

Mein Ziel ist es, dem Raster eine leere Zeile hinzuzufügen und sofort mit der Bearbeitung des Ext.grid.plugin.CellEditing Plugins zu beginnen, das auf dem Gridpanel aktiviert ist.

var addNewRow = function() { 
    // start add logic 
    var row = { 
    'name': '', 
    'email': '', 
    'description': '' 
    }; 
    store.add(row); 

    // start auto-edit logic 
    var index = store.indexOf(row); // -1 
    var grid = Ext.ComponentQuery.query('gridpanel[itemId=upperPane]')[0]; 
    var plugin = grid.getPlugin('upperPaneEditor'); 
    plugin.startEdit(index, 0); 
}; 

Beim Debuggen wird der Index auf -1 gesetzt und das funktioniert nicht. Ich habe die Funktionalität von plugin.startEdit() mit (0, 0) getestet, um die erste Spalte der ersten Zeile zu bearbeiten. Ich habe versucht, die Bewegung die Auto-Edit-Logik, um verschiedene Event-Handler versuchen, es an der Arbeit:

  • Die add Veranstaltung speichern entlassen, nachdem das Add und reflektierte den richtigen Index aber das Element wurde noch nicht im Gridpanel präsentiert für das Plugin, um es zu greifen.
  • Der afterrender Veranstaltung Gridpanel keinen Blitz nicht nach dem Add
  • Der add Veranstaltung Gridpanel gefeuert, sondern erst nach einem Doppelklick auf einer Zelle manuell zu bearbeiten. Es endete auch in einer Schleife mit sich selbst.

Ich bin mir nicht sicher, was ich an dieser Stelle noch versuchen sollte.

Antwort

1

Ihr row ist ein Modellkonfigurationsobjekt, keine Modellinstanz, daher gibt store.indexOf -1 zurück.

Versuchen:

var inst = store.add(row)[0]; 
... 
var index = store.indexOf(inst); 
+0

Awesome, die funktionierte. Vielen Dank! – anjunatl

Verwandte Themen