2013-07-22 16 views
5

Sto utilizzando ExtJS 4.2.1 e ho un'impostazione abbastanza semplice: archivio basato su JSON e un gridpanel che legge da tale archivio. Un evento click del pulsante Aggiungi chiama la funzione seguente.Attiva/disattiva l'editor di celle dopo la registrazione programmaticamente aggiunta alla griglia in ExtJS

Il mio obiettivo è aggiungere una riga vuota alla griglia e iniziare immediatamente a modificarla utilizzando il plug-in Ext.grid.plugin.CellEditing abilitato sul gridpanel.

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); 
}; 

Durante il debug di questo, l'indice è impostato su -1 e non funziona. Ho testato la funzionalità plugin.startEdit() con (0, 0) per modificare la prima colonna della prima riga e funziona correttamente. Ho provato a spostare la logica di auto-edit a vari gestori di eventi cercare di farlo funzionare:

  • del negozio manifestazione add licenziato dopo l'add e riflessa l'indice corretto ma l'elemento non ero ancora presentare nel gridpanel per il plugin per afferrarlo.
  • evento del gridpanel afterrender non è scattato dopo l'add
  • evento del gridpanel add sparato, ma solo dopo un doppio clic su una cella manualmente per modificarlo. Inoltre è finito in un ciclo con se stesso.

Non sono sicuro di cos'altro provare a questo punto.

risposta

1

Il row è un oggetto di configurazione modello, non un'istanza di modello, pertanto store.indexOf restituisce -1.

Prova:

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

impressionante, che ha funzionato. Grazie! – anjunatl

Problemi correlati