2015-10-21 20 views
6

prova a digitare fonte modalità su http://ckeditor.com/demo all'uso di debug CKEDITOR.instances["editor1"].on("key", function(e) {console.log("change: " + e.editor.getData())}) nella consoleCKEditor getData() restituire dati non aggiornati (ultima modifica mancanti) in modalità sorgente

vedo sempre un carattere meno nella console, quindi se ho digitato abc vedo ab

nota: utilizzando evento chiave a causa di https://dev.ckeditor.com/ticket/12031Guidelines e How to detect CKEditor source mode on change event

+0

Ho controllato il codice una volta. Sono d'accordo sul fatto che il lavoro sia diverso. Mostra un'istanza precedente all'istanza corrente. Posso vedere l'implementazione di getData()? Quello che sento è che stai cercando di ottenere i dati dall'editor ancor prima che tu permetta che il cambiamento venga effettuato sull'editor. – bozzmob

+0

Sto usando ng-ckeditor per farlo funzionare con il mio angolare. ng-ckeditor usa getData() internamente. –

+0

Buono a sapersi che la mia analisi ha aiutato :) Si prega di contrassegnarlo come Risposta (segno di spunta) In modo che la domanda sembrerebbe risolta. – bozzmob

risposta

2

Scrivendo una risposta dettagliata qui con la mia analisi.

Come ho detto prima, getData() viene recuperato anche prima che il tratto chiave venga registrato come parte del testo nell'Editor. Ecco perché vedi i dati precedenti (i dati che precedono la pressione dei tasti)

Non sono in grado di aiutarti molto con la situazione attuale in quanto è esposto un codice molto minimale. Non sono sicuro di come lo stai usando e di quali linee lo presiede.

Ma, inserirò nella mia analisi- Ho creato un waitfunc() che imposta solo il timeout per 5sec. Ho fatto questo per osservare se la chiave è stata registrata prima nell'editor o se i dati sono stati presi per primi.

function waitfunc() { 
    setTimeout(function() { 
     console.log("wait") 
    }, 5000) 
} 

CKEDITOR.instances["editor1"].on("key", function(e) { 
    waitfunc(); 
    console.log("change: " + e.editor.getData()); 
    waitfunc(); 
}) 

Vedo che i dati vengono presi per primi. E poi il nuovo tasto premuto viene aggiunto come parte dell'editor. Ho aggiunto "c" alla fine del paragrafo.

Both timeouts happen after the data is grabbed

Quindi, si prega di dare un'occhiata al codice una volta (l'ordinamento di linee di codice o altro). E se possibile, condividere più codice, posso aiutare più di questo.

Spero che aiuti.

0

la mia comprensione è che l'evento "key" è simile a onkeydown in javascript, quindi guardare il contenuto dell'editor sul tasto giù significa guardarlo prima che il carattere sia stato aggiunto. Si dovrebbe guardare l'evento "keyup", che viene attivato dopo che i contenuti sono stati modificati. Molto simile alla soluzione setTimeout, ma un po 'più "corretta".

Vedere qui per un very similar question e un esempio di codice