2013-03-19 16 views

risposta

14

Il seguente codice salverà la modifica corrente.

Slick.GlobalEditorLock.commitCurrentEdit(); 

È necessario posizionarlo all'interno di un gestore di eventi che si ritiene debba attivare il salvataggio. Ad esempio, se si sta utilizzando il campione di editor di testo plug-in, credo che una classe editor-text CSS viene aggiunto al campo di inserimento che si crea quando si sta modificando una cella in modo qualcosa come questo dovrebbe funzionare:

$('#myGrid').on('blur', 'input.editor-text', function() { 
    Slick.GlobalEditorLock.commitCurrentEdit(); 
}); 
+0

Potrei mancare qualcosa qui. In teoria questo funziona - perché se lo aggiungo nella console di Firebug e poi ottengo lo stato attivo e lo smetto di focalizzarlo, funziona una volta. Ma nel codice, anche nel documento. Già, non funziona: \ – sunzyflower

+0

Errore mio, quell'esempio sfocato non funzionerebbe perché i campi di input sono stati aggiunti dinamicamente. Dovrai invece associare l'evento usando "on". Ho aggiornato l'esempio, provalo. – clav

+0

Sto ottenendo il seguente errore: TypeError:.. JQuery (...) su non è una funzione [rompere su questo errore] \t jQuery ('# myGrid') il ('sfocatura', 'ingresso .editor-text ', function() { – sunzyflower

6

I scoperto che avevo bisogno di avvolgere gestore di CLAV in un timeout:

$("#myGrid").on('blur', 'input.editor-text', function() { 

    window.setTimeout(function() { 

     if (Slick.GlobalEditorLock.isActive()) 
      Slick.GlobalEditorLock.commitCurrentEdit(); 

    }); 

}); 

da evitare errori come:

Uncaught NotFoundError: An attempt was made to reference a Node in a context where it does not exist. 

quando si utilizza la tastiera per spostarsi. Presumibilmente, il nuovo gestore di sfocatura si attiva prima che SlickGrid possa eseguire la propria gestione e questo causa problemi.

4

Sfortunatamente, probabilmente a causa delle differenze nell'elaborazione degli eventi, la versione di Grame interrompe la navigazione della tastiera in chrome. Per risolvere questo problema, ho aggiunto un altro controllo a commettere solo la modifica, se l'elemento di recente messo a fuoco non è un altro elemento editore all'interno della griglia (come il risultato di navigazione da tastiera):

  $('#grid').on('blur.editorFocusLost', 'input.editor-text', function() { 
       window.setTimeout(function() { 
        var focusedEditor = $("#grid :focus"); 
        if (focusedEditor.length == 0 && Slick.GlobalEditorLock.isActive()) { 
         Slick.GlobalEditorLock.commitCurrentEdit(); 
        } 
       }); 
      }); 

Questo sembra funzionare a corrente versioni di firefox, chrome e ie.

Problemi correlati