Quando si modifica la mia griglia, se faccio clic fuori dalla griglia, la casella che stavo modificando è ancora modificabile. Come faccio a ottenere la cella modificata per "completare" la modifica quando perde lo stato attivo?Slickgrid - Focalizzazione persa per terminare la modifica
risposta
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();
});
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.
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.
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
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
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