ACE Editor applyDeltas кажется несовместимым с setTimeout

Я пытаюсь воспроизвести пользовательский ввод в редакторе ACE. Собрав очередь дельт, пытаюсь зациклиться на очереди и показать изменения с задержками.

Вот немного упрощенный код:

// 'queue' is queue of delta objects
var i = 0;
function playbackLoop() {
// setTimeout( function() {
      editor.getSession().getDocument().applyDeltas([queue[i]]);
      i++;
      if(i < queue.length)
           playbackLoop();
// }, 250);
}

Этот код работает — например, он оставляет мне точную копию того, что ввел пользователь.

Когда я раскомментирую строки для setTimeout, при воспроизведении курсор в редакторе перемещается каждые 250 мс, но символы не появляются. Итак, я пришел к выводу, что setTimeout мешает applyDeltas.

Я предполагаю, что applyDeltas полагается на какие-то скрытые внутренности, но я понятия не имею, что они могут быть.

Спасибо!


person Aaron Starov    schedule 04.12.2013    source источник


Ответы (1)


Может проблема с дельтами в очереди? Он отлично работает здесь http://jsbin.com/ojijeb/320/edit. просто редактируй и нажимай повтор

person a user    schedule 05.12.2013
comment
Спасибо, я попробую получить дельты из UndoManager, как вы сделали в своем примере (я получал их при каждом событии изменения редактора, в котором могут отсутствовать некоторые ключевые шаги). Кроме того, если кто-то еще столкнется с этим, используйте http://jsbin.com/ojijeb/321/edit вместо jsbin выше (который кажется более ранним черновиком). - person Aaron Starov; 05.12.2013